Copyright: (c)1998-2001 MEGALUX Light Technique Ltd.


What is UP?

Ultimate Paint is a graphics editor. Its main purpose is to draw and edit graphics, scan photographs, enhance them and add some spectacular effects.

It also has a very flexible brush handling method which encourages creative drawing.  It can be used extensively in everyday multimedia tasks.

This program is shareware. You may use the unregistered version only for non-commercial purposes, while after registering it, you're allowed to use it in commercial environments, too. The only exception is the usage in electronic scoreboard and electronic advertisement board systems; if you plan to use it for such purposes you have to ask for our written permission.

We plan to release major versions every year, while publish minor enhancements in every 2-3 months. If you register Ultimate Paint, your registration key will enable you to use all minor versions until the next major release.

Unregistered versions stop functioning after the trial period of 30 runs.

It is recommended to visit Ultimate Paint homepage to get the latest effects and other enhancements that will help you to be more productive. You can also read the latest information on the development there. The homepage can be accessed easily from the Help / About panel of UP.

Contact us for comments and bug reports (which are warmly welcome):

JTL Development, Inc.

1021-H Budapest, Nyéki út 1.

HUNGARY, EUROPE

Internet: http://www.ultimatepaint.com

E-Mail: support@ultimatepaint.com


How to Improve UP?

First of all you can send your comments and descriptions of functions you would like to see in Ultimate Paint. If they're reasonable they will be included in one of the next releases. You may also send your more specific ideas with examples.

Send bug reports. Although we considered UP free of annoying bugs, there may be some hidden ones we hadn't discovered. Important bugs will immediately be fixed.

Write your own components if you're familiar with programming. Share it with others and share it with us. You may also send plug-ins in Filter Factory format. Send these components to plugin@ultimatepaint.com as attachments. Please DO NOT SEND compiled UPCs, they're huge and we are afraid of bugs and viruses. If you send valuable, unique routines, you may get registered shareware versions for free.

You can also sign up our UP Announcement List to be notified on every update. If you have tips and tricks you would like to share with others, sign up to the UP User Discussion List.


UP Basics

You can start the program by clicking on its icon or run it from the command line and specify additional parameters.

Ultimate Paint runs in Hi-Color (15 or 16 bit) and True Color (24 or 32 bit) video modes. If you try to start it in another mode it will display an error message. Switch to one of these modes on panel Start / Control Panel / Settings / Display / Settings. Here you can alter parameter Color Palette to High Color or True Color. From now on your computer will display everything in 32768 or more colors.

First time the Main Menu of the program is positioned in the top left corner. There you can find the File, Edit, Brush, Image, Desktop, Options, Window and Help menus. Under the menu bar you can find the Function bar containing the standard and most frequently used functions as well as the Undo / Redo and Zoom controls. There are two unique functions here: Load previous and next image. These buttons load the previous and following image in the folder in alphabetical order, respectively.

Images are placed in separate windows. There's always at least one image open. If you close down all images, the program automatically creates an empty one. The name of each image with full path and current zoom factor is displayed in the caption of its window.

To the right there's a panel where you can find the Fast Palette, and to the left there is a tool bar which contains icons of different drawing operations (this bar is called Tool bar), the drawing and the background colors. You can see rulers on the left side and on the top of the image. They're there to show the exact dimensions of the image. Their measurement unit can be in inches, centimeters or pixels. This can be set on the Interface panel of the Options / Preferences dialog.

If you see only part of an image, you can move the visible portion of the drawing window around using the sliders of the window, the wheel of your mouse (hold the Ctrl button down for horizontal movement) or the arrows on the keyboard. You can move to edges of the picture by pressing the keys Home (left), End (right), PgUp (top) or PgDn (bottom).

You can zoom in between 1 and 32 or zoom out between 3/4 and 1/10. Click on the up and down arrows beside the value or use the gray + (increase) and - (decrease) keys to change the zoom factor.

Hold down the Shift key while zooming to increase / decrease the zoom value by two instead of only one.

Maximum and minimum zoom values also depend on the resolution of the image:

-	in the case of zoom in neither image_width*zoom nor image_height*zoom should exceed 32000,

-	to use zoom factors less than 1 both image dimensions must exceed 4 pixels.

If you press key z you can switch back from a greater zoom to a smaller one. If it's possible the program will display the whole picture. If you press key z again you'll get the previous zoom back. The picture will be centered around the mouse pointer.

There is a status bar at the bottom of each image. Here you can see the drawing technique, the cursor coordinates, additional information on the current operation and the operation instructions. In Expert mode there you can also find a small icon with which you can set the Instant Brush option of the Preferences panel.

Move an image near to another to automatically dock it which leaves no space between them. Also, if you resize an image by dragging its border, neighboring images are resized, too. You can switch automatic resizing off (Resize Neighbors).

It's possible to work on only parts of your image by making selections while Instant Brush is switched off.


Command Line

There are a few command line options you can use to start Ultimate Paint with. If you give a picture name, the program automatically loads it. E.g.

UPAINT mypic.pcx

loads picture mypic.pcx from the current directory.

You can enter names of more than one image in the command line, the program will open all images in different windows. If an image name contains spaces, place quotation marks around it. E.g.

UPAINT firstpic.jpg "my second pic.pcx" third.bmp

If an error occurs during loading images, the process is immediately finished and no other images are loaded. E.g. if my second pic.pcx cannot be loaded (does not exist or is corrupted) third.bmp won't be loaded at all.


Frequently Asked Questions

These are the most commonly asked questions about Ultimate Paint. Read them before you contact us, maybe you'll find the answer here.

Q:	How can I report a bug I've discovered?

A:	If you checked that you have the latest version, send an E-mail to bug@ultimatepaint.com with detailed description how you found the bug. You should also mention basic information on your configuration: operating system, memory size, video card, other programs running in the background.

Q:	Each time UP is upgraded do I have to uninstall the old instance first or will it just overwrite the one I have?

A:	If you don't uninstall the previous version there will remain two unnecessary uninstall data files which consume a few KBytes on your hard disk. There will also remain an unnecessary entry on the Add/Remove Program Panel. If you can live with that, it's good either way.

Q:	How can I uninstall Ultimate Paint?

A:	If you ever want to uninstall it, select Start / Programs / Ultimate Paint / Uninstall Ultimate Paint. Or use Control Panel's Add / Remove Programs icon.

Q:	Why do I get message 'First switch to HiColor or True Color display mode'?

A:	UP does not work in 16/256 color modes, please switch to a HiColor (15 or 16 bit) or True Color (24 or 32 bit) mode. You can do it under Start / Control Panel / Settings / Display / Settings. Here you can alter parameter Color Palette to High Color or True Color. From now on your computer will display everything in more than 32768 colors. UP requires this to run.

Of course you can switch back the same way any time you want to.

Q:	Is Ultimate Paint Year 2000 compliant?

A:	Ultimate Paint is totally Year 2000 compliant, as it uses dates only when it saves and loads images (and that is operating system dependent). As long as the host operating system (Win95 / 98 / ME or NT) is designed to handle Y2K, there should be no problem using Ultimate Paint.

Q:	Can I convert all my BMP images into JPEGs with Ultimate Paint? If so, what are the possible drawbacks?

A:	Yes, simply use the File/Batch Convert... function.

But be careful! JPEG is a lossy format, so you will get details lost. The program saves JPEG images with quality setting 75 (out of 100) by default. The greater this magic number is, the better the image quality, but the bigger the file will be. 75 is a good trade-off, you won't see visible degradation of digital images, and the size is kept small. Unfortunately when dealing with computer graphics JPEG tends to make sharp contrast changes noisy. Generally, JPEG is not suitable for saving computer graphics even at high quality settings. Use lossless formats (such as PNG) to save images like these.

Q:	Can I save transparent GIFs with UP?

A:	Yes, use the Transparent check box in the Save dialog. Transparent areas of the image will be kept transparent.

Q:	I've found several submodes under some icons in the Help, but I can't find them in Ultimate Paint. Are these future options, or just hidden somewhere?

A:	No, they're there. Just click on the icon, but don't release the mouse; hold it down for a while. A small panel will be displayed, from where you can select these similar functions. You can also activate these subicons one-by-one by pressing the hot key of the icon more than once.

Q:	Why does the text I've typed in disappear after selecting a new icon?

A:	Close the text you've typed in with the Apply button. If you click on another icon or select a menu function the text which has not been closed with Apply will be abandoned. Nevertheless this text is not lost, it will reappear when you select the Write Text function again.

Q:	I can't seem to find my color palette or tools on UP. Where are they?

A:	All images you open (even ones with palette) are converted to true color (RGB) format inside UP. When you save them, you may convert them back to the desired format.

This means you don't have any palette tools in UP, everything goes in true color. The Fast Palette you can see on the palette bar is only for faster access of your frequently used colors.

Q:	How can I cut out a section of a picture and erase the rest?

A:	Turn Instant Brush Creation under Options / Preferences / General off. Use the cut area functions (Cut Area icon). Now you can crop this area (Image / Crop) so only this area will remain and the rest will be ignored.

Q:	I can't find a way of cutting an oval and using it as a mask for a picture: i.e. the center must be transparent when I cut it and paste it over the picture. How can I do this?

A:	Draw a filled ellipse to a separate image. Select the former fill ( = drawing) color as the new background color, use function Brush / Select all to get the desired mask, switch to your image and place the new brush to the position you want.

Q:	Is there a way to enter a zoom ratio as a decimal, i.e. to define a precise ratio?

A:	Unfortunately not. You have to use the values the up-down zoom control (or gray + / - keys) can set.

Q:	Can I capture the content of the screen with UP?

A:	Yes, use function Desktop / Capture.

There's an alternate way, since screen capturing is also built into Windows. Press Print Screen or Alt+Print Screen and Windows will put the whole screen or the active window into the clipboard, respectively. From here you can import it into UP by using function Edit / Paste as New.

Q:	How to make a tiled image?

A:	Select the image you want to tile as the brush (Cut Area icon). Change the fill mode to Pattern Fill (the other subfunction of fill) and fill an empty image (or just a desired area). It will tile the brush on that area. You can also control the origin of the tiling (see the Fill Tool bar).

Q:	Can I use filters designed to work with Adobe Photoshop or Paint Shop Pro?

A:	Yes, UP supports most Adobe plug-in filters (*.8BF files) and Filter Factory (*.AFS files). You can also use the Adobe Custom Filters (*.ACF files). To use Adobe plug-ins, you should set Options / Preferences / Plug-ins / Adobe plug-ins location to the folder where the plug-ins are. To import Filter Factory or Custom Filter files, use Image / Filter Factory and Image / Custom Filter dialogs, respectively.

Q:	I checked Use Adobe Plug-ins and set the Adobe Plug-ins location to the right directory, but no plug-ins appear. What do I miss?

A:	Most of the plug-ins use other DLLs which may not be present on your computer. The most likely candidates are MSVCRT10.DLL and PLUGIN.DLL. Check the list under Plug-ins failed to load and examine the code of these plug-ins to discover what DLLs they use. Get these DLLs (e.g. from the Internet - the above mentioned two DLLs can also be found on our site) and copy them into the System folder of Windows or the UP folder.

Q:	Is there a user group somewhere for UP?

A:	We created a mailing list on our homepage to provide a forum for tips, tricks and questions. There's also a web ring maintained by friendly people who use UP a lot. You can also help make these real useful places for UP users with your comments and tips!

Q:	Can I use UP to design posters or billboards, or do I have to ask for a permission first?

A:	We intended to get permission from the ones who want to use UP in connection with electric advertisement boards / stadium scoreboards. So you can use it freely to produce any kind of still image to be used in anywhere (and that includes advertisements: small or big; in a magazine, in the street, on the Net, etc.) except on electric video boards, video walls and scoreboards. Only in that latter case you have to seek for a permission.

Q:	Now, that version 2.0 is published long time ago can I still use earlier versions for private and business purposes?

A:	Yes, you don't have to pay for any version prior to 2.0. Even if we publish new versions, the earlier freeware releases will remain free.

Q:	We would like to include UP on our shareware CD-rom. Should we ask for your permission?

A:	Both freeware and unregistered shareware versions of UP can be put on any media you like without our permission as long as you keep the original setup.exe file and the short description file file_id.diz intact. You cannot modify these files, nor can you add any other files to the install package.


Selections

You can make selections if you use the Cut functions with the Instant Brush switch turned off. Selections are marked with dashed lines. All image processing operations (Filter Factory, Custom Filter, Adobe plug-ins and UPCs) will work only on the selected parts leaving other areas intact. If you don't have a selection, these functions work on the visible area (if Clipping is on) or on the whole image (if Clipping is off).

You can Cut, Copy, Paste and Delete selections with the help of the Edit menu functions. You can also invert the selection and clear it (or in other words deselect it - this functionality is also available by pressing Shift+D).

If you switch to a drawing mode and start drawing, the selection will automatically be cleared.

If you had a selection and you either deleted it directly or switched to a drawing mode that deletes it, a Delete Selection entry appears in the Undo list.


Colors

There are two colors you can use during painting: the drawing and background colors. Most icons paint with the drawing color by default, however in several cases if you finish an operation with the right mouse button the background color is used.

You can set these colors in many different ways:

The easiest way is to click on the drawing or background color on the Tool bar which brings up the Color Selection dialog. You can also choose several predefined colors from the Fast Palette. The Get Color icon may help you to select a color already on the image.

There are also several hot keys which may help you speed up the process of changing a color:

Ctrl+Shift+D	instantly brings up the drawing color selection dialog,

Ctrl+Shift+B	brings up the background color selection dialog,

Shift+Up arrow	swaps the current drawing and background color,

Shift+PgUp/Home	increases/decreases the Hue of the current drawing color,

This value represents the base shade of the color.

Shift+Right/Left arrow	increases/decreases the Saturation of the current drawing color,

This value tells how much white the color has.

Shift+PgDn/End	increases/decreases the Value (Intensity) of the current drawing color,

This is the brightness of the color.

Shift+Down arrow	changes the functions described above: instead of Hue / Saturation / Value you will be able to directly change the R / G / B values of the current drawing color. By pressing it again the program switches back to HSV-change mode.

When you change the drawing color, the different color components (HSV or RGB) are displayed on the status bar of the current image.

Drawing and background colors are remembered by UP between sessions.


Color Selection Dialog

You may get this dialog if you want to change the drawing, background or shadow color, or a color parameter in an UP Component.

On the left side you can see the Hue, Saturation, Value (Intensity) and Red, Green, Blue components of the color. You may change these values directly (Hue can change between 0 and 359, while the other parameters between 0 and 255) - to change a numeric value quickly, click on the value and drag the mouse upwards / downwards. You can also use the Hue circle and the SV color field: select a base color by clicking on the Hue circle and get a color from a similar group of colors by clicking on the SV field. In both cases you may drag the mouse over the fields to see instant color changes.

The selected color can be seen on the palette bar (in the case of changing the drawing or background color) or on the Text tool bar (shadow color).

You may get the hexadecimal value of the selected color in the HTML field. Copy this value onto the clipboard and paste it right into your HTML code if needed.

If you close the dialog with the Ok button, the new color will be permanent, while clicking on the Cancel button leaves the original unchanged. The Help button brings up this help.


Drawing Color

The drawing color is the color you make different operations with: you may draw freehand, create different shapes, fill an area, etc. If you use the left mouse button during a drawing operation in most cases it will be carried out with this color.

You can see the current drawing color at the bottom of the Tool bar in the smaller box. It is surrounded by the background color. If you click on this box or press Ctrl+Shift+D, you will get the Color Selection dialog where you may alter it. You can also change it by using the Fast Palette or with different hot keys.


Background Color

With the background color you can also carry out some drawing operations. The difference is that you should use the right mouse button during the operation. In addition certain operations (Cut, Clear Screen) use this color uniquely.

You can see the current background color at the bottom of the Tool bar. It surrounds the drawing color. If you click on this field or press Ctrl+Shift+B, you will get the Color Selection dialog where you may alter it. You can also change it by using the Fast Palette or with different hot keys.


Fast Palette

The fast palette can be found on a separate toolbar. Here you can see different colors in adjacent boxes. These boxes help you store and restore the most often used colors.

To restore one of these colors, simply click on the desired box. If you click on one of these boxes with the left mouse button, the drawing color will be changed to the color of this box. If you click with the right mouse button, the background color will be altered.

If you want to store the drawing or background color, click on the desired box with the left (drawing color) or right (background color) mouse button while holding any of the Shift, Ctrl or Alt key down.

You can save and load fast palettes by using the Load and Save buttons or get the palette of the current image with the Limit Colors button:

Gradient	turn this option on if you want to create color gradients on the palette. While this switch is on you can click on the palette with the left mouse button to set the gradient start and with the right mouse button to set the gradient end. When you set both colors the program creates the gradient. When finished, simply turn this switch off,

Limit Colors	this function brings up the Limit Colors dialog, where you can create a Fast Palette or quantize your image (limit its colors),

Load	you can load a previously saved Fast Palette. If you click on this function an Open dialog comes up where you can select the palette file to load,

Save	by invoking this function you can save the current Fast Palette. In the Save dialog you can give a name and select the location of the file. Saved palettes will have the extension of .pal.

Help	the button brings up this help page.

If you close the Fast Palette panel you can make it visible again by using switch Options / Palette.


Histogram

The histogram panel provides statistics on the current image. You can see the number of color shades and their distribution. To the right you can select the channel on which the statistics will be based. It can be one basic color (Red, Green, Blue), all basic colors (All) or the intensity channel.

To the left you can see the histogram itself. It shows the number of pixels that contain the selected color / intensity from the darkest shade (black) to the lightest one. A small intensity strip helps you to identify the values (as well as the Value numeric parameter).

Parameter Count shows tha number of pixels having that certain shade / intensity, while global parameters Mean and Std Dev display the mean value and standard deviation of the distribution, respectively.


File Menu

In the File menu you can find the following commands:

New...	creates a new picture with background color, using the New dialog,

Open...	opens an existing picture in the Open Image dialog,

Browse...	browses the current directory for all available images. See the Image Browser dialog,

Save	saves the current picture (if the picture has no name it pops up the Save as dialog),

Save As...	saves the current picture with a different name in the Save Image dialog,

Close	closes the current image. It also asks you to save any changes you've made since the last save operation,

Close All	closes all images currently open,

Send via E-Mail...	sends the current image to an E-Mail address along with a custom message. The message can be composed in the Send via E-Mail dialog,,

Batch Convert...	invokes the Batch Convert dialog, where you can convert group of files from one format to another,

Select Source...	if you have more TWAIN scanners attached you are allowed to select the active one from a menu. If you have only one scanner you don't have to make a selection,

Acquire...	scans a picture from the scanner if you have one attached,

Print...	prints the current picture. It first pops up the Print dialog, where you can select the orientation, the number of copies, the layout of the page and see the print preview. If you press Print, it will send the current picture to the printer.

Printer Setup...	the standard Printer Setup dialog appears, where you can select the printer to be used and several printing-specific parameters,

Exit	exits Ultimate Paint. If there are unsaved changes the program asks whether you want to save them. Select Yes to save changes, No to discard changes and Cancel to return to UP.

After these options comes a list of recently used files. An image appears in this list when you open it and/or save it. The most recently used file appears at the top of the list. The maximum number of entries can be set in the Preferences dialog. If a new image gets listed at the top and the list have already reached its maximum length, the last entry automatically disappears.


New Image Dialog

You can open a new picture here. This picture will be filled with the current background color. You can set the size of the picture: Size X specifies the width, while Size Y the height of the picture.

After that, clicking on the Ok button opens the new picture. The Cancel button on the new picture dialog aborts the current operation. Help brings up these instructions.


Open Image / Brush Dialog

You open an existing picture or brush in this dialog. You can select the name and location of the picture, decide which file types to display on the list.

You can see a small preview of the selected picture at the bottom of the dialog box. If you uncheck the Preview switch, this preview won't be displayed. To the right there is a slider displaying the index of the current image in the file (it has meaning only when opening GIFs or AVIs that have multiple images).

Under that index you will find the basic properties of the selected picture: size in pixels, picture type, size in bytes, date of last modification.

List Folders contains the last folders that were used to open images in. Select a folder and the program opens it immediately.

Button Set as default sets the current extension as the default type of untitled images.

If you press the Ok button, the picture will be opened in a new window (or replace your current brush). If you press Cancel, the open operation will be canceled. Button Help brings up this help text.


Image Browser Dialog

You can browse the current directory for all images recognized by UP. The images will be scaled down and displayed in one panel simultaneously. If there are more than you can see at once, resize the form or use the scroll bar to see the rest. If you point your cursor to an image, the image dimensions and file size will appear.

You can display contents of a folder by clicking on it on the tree view. Double clicking on a folder - as well as clicking on the [+] sign - will expand / collapse its subfolders.

To open an image simply double click on it.

If you would like to create a HTML page that includes the thumbnails of all images in the current folder, press the Create HTML button. The Create HTML dialog will come up.

To close the panel without selecting a file, use the Close button at the bottom.

Button Help brings up this help text.

By default the browser opens an image every time it is displayed and scales it down. This may take some time if you have large images. You can speed this up by enabling UP to store the scaled images in a separate file. These cache files will be stored in folders you visit with the browser, and will be used to speed up thumb displaying next time you enter that folder with the browser. You can enable this function on the Options / Preferences panel.


Create HTML Dialog

This dialog makes it possible to automate most tasks of creating webpages that include thumbnails of your images. The HTML code as well as the thumbnails will automatically be generated.

Page Width	determines the width of the HTML page in pixels. The table of thumbnails will fit into this width.

Show Image Name	sets whether image names should be displayed below their thumbnails.

Link to Original Image	this switch makes it possible to link each thumbnail to its original image. When the user clicks on a thumbnail, the browser will display the image in its original form and size.

Thumbnail Prefix	in this field you can set what prefix characters should be used before thumbnail images (to differentiate thumbnail names from original image names).

Alignment	is the alignment of the table of thumbnails and the navigation arrows. It can be left or right aligned and centered.

Limit Rows to	this switch allows you to break the thumbnails into several pages. Check the option and enter the number of thumbnail rows you want to display on each page.

Thumbnail Width	and

Thumbnail Height	determines the maximum size of each thumbnail. Original images will be scaled down retaining the original aspect ratio to that maximum size.

Full Fit	allows thumbnails to fill the Thumbnail Width/Height-sized rectangle fully retaining aspect ratio. Parts of the images that would not fit in are cut off.

Horizontal Gap and

Vertical Gap	are the gaps left between thumbnails measured in pixels.

Previous and Next	are two switches that control the visibility of navigation arrows. Check them to display the arrows. The arrows are displayed stretched on the panel, however the created HTML code has them in their original size. Press button Replace to replace the currently selected arrow-graphics.

Base Name	is the base name of the HTML files. The program numbers these pages from 1, so e.g. if the base name is images.htm then pages will have the names images1.htm, images2.htm and so on. You can choose between the .htm and .html extensions.

Destination Folder	is the folder where all the HTML files are created in. This should be a folder on your hard disk or on a network drive.

Image Subfolder	is the name of a subfolder where all the thumbnails are created in. Also, if you choose Link to Original Image, all original images are copied here, too. Similarly, arrow graphics is copied here.

Be careful, if you replace the arrow graphics with a new one, the copy of the old one isn't removed automatically.

E.g. if you choose c:\temp as your Destination folder and images as the Image Subfolder, all thumbnails will be generated into c:\temp\images.

All images are referenced relatively, so only folder Image Subfolder will appear in the HTML code, Destination Folder is not referred to at all.

Button Ok creates the HTML pages and thumbnails, Preview allows you to preview the pages in the default browser. Help brings up this page, while Cancel abandons the dialog and the settings.


Save Image / Brush Dialog

This dialog is similar to the Open Picture / Brush dialog but here you can save the current picture or brush. You can select an existing name or type a new one, decide which file types to display on the list, and select the location where you want to save the picture to.

List Folders contains the last folders that were used to save images. Select a folder and the program opens it immediately.

There are several parameters of the image that determines the number of colors, dither, transparency, interlaced/progressive mode, and the image quality:

Colors	here you can select the subformat of the image. Usually there are several possibilities; almost all formats support true color (16 million colors), some of them can be saved in 256 or 16 colors and there are a few which can save images in grayscale or monochrome. Selecting the Adaptive setting makes UP to count the colors first, then to select the nearest submode (but be careful, it always will be a mode with 256 colors or less).

Limit Colors to	if the image will be saved with a palette (256 or less colors) you can further reduce the colors by setting this value.

Dither	if the image is saved with a palette, you can instruct UP to dither the image. This way you can achieve better image quality.

You should use Dither only when saving the final version of the image, because it makes harder to make any changes later, and increases the compressed image size.

Transparent	Some image types (GIF, PNG) can save transparency information. If you check this parameter all pixels that are transparent or semi-transparent will be saved with this information.

To save transparent PNGs, select the 32-bit or 256 color mode on the panel.

256 color PNGs and GIFs know only full transparency / full opacity. To retain similarity to the semi-transparent areas of the original image switch on the Dither option which also dithers transparency.

Interlaced/Progressive	Some formats can store the image in interlaced of progressive subformat. It can be useful, because even when the image is still loading, you can see its approximate content. Usually this means slightly bigger images - the rare exception is JPEG, where you can get even slimmer files using this option.

Quality	when you save JPEG files (which is a lossy format), you can select the final quality of the image. The higher this setting, the better the quality but the bigger the file will be.

JPEG files are saved with image quality set to 75 by default, which is a good trade-off: it retains good quality and has small size.

Please notice that UP can save GIF files. The algorithm used is not LZW based, thus free of royalty fees, while still retaining compatibility with normal LZW-based GIF decoders. Unfortunately it also produces slightly larger files. THIS IS A LEGAL ISSUE AND NOT A QUESTION OF TECHNICAL SKILL. We may include the standard GIF compression algorithm in a later release.

If you save images with palette (so UP has to reduce the number of colors) or save lossy images (JPEG), be careful, because the image might change which you won't notice until you reload the saved image. This can be automated by switching Auto reload on.

Use button Optimize to get to the Image Optimization panel which helps you to reduce file size while retaining image quality.

Button Set as default sets the current extension as the default type of untitled images.

UP cannot write multiimage GIF files. If you save an image and give the name of an existing GIF file, it will be overwritten with the current image.

If you press the Ok button, the current picture or brush will be saved. If you press Cancel, the save operation will be canceled. If you save a picture that already exists the program asks whether you want to overwrite it or not.

Button Help brings up this help text.


Optimizing Image

This dialog helps you to optimize your image and to find the image format and parameters best fit to your particular needs. Use it to find the right quality setting for your JPEG, or to find the minimum number of colors for your GIF or PNG image to get the smallest file possible.

You can see a parameter panel on the left and four preview images. Set the parameters of the current image (see the tab above the parameter panel) and press the Preview button. The preview of the image will be displayed along with the file size required to save the image with these parameters. When you click on an image, the tab containing its parameters will be automatically activated.

Use the gray + / - keys to zoom in / out the image, drag the mouse or use the arrow keys to get the desired part of the image to preview.

To accept a setting press the Accept button of that certain image. You'll get back the Save as dialog with all parameters set.

If you're using a smaller screen resolution or need only two previews, press the << button to hide the right images. Later you can press the >> button to display them again.

You can save and restore panel-settings: enter a new name in the combo box and press button [image] to save the current settings. Later use button [image] to retrieve them. Finally [image] deletes the currently selected parameter group.

Help shows this help page, while Cancel abandons the operation and makes no changes to the parameters on the Save as dialog.

The program needs four times the memory required to store an image to manage this panel, so you may get the Not enough memory warning when you try to optimize bigger images. In this case you won't be able to use this functionality.


Send Via E-mail Dialog

This dialog helps you to easily send an image via E-Mail.

Before invoking this dialog make sure the image you want to send is the active one in UP. Fill out the address fields and compose your message. After that simply press button Send. Now let's see the different parameters in more detail:

From	your E-Mail address,

To	the address you want to send your message to,

Subject	the subject of the mail,

Body	finally this is the body of the message.

There are several buttons below these fields. Send sends your image along with the message you've composed. Advanced / Normal displays or hides more settings in connection with the E-Mail and your Internet account. Help brings up this help page, while Cancel abandons your message and closes the dialog without sending the E-Mail. If you choose to display additional parameters you can see and set the following values:

From Name	your name that is displayed along with your E-Mail address in the header of the message,

Reply To	enter this address only if it is different from your From field. The addressee can send a reply to this address,

SMTP Server	this is the name of your outgoing mail server,

User ID	this field can be left blank in most cases, however some mail servers need your user ID, too, to send your messages.

The first time you invoke this dialog the program tries to retrieve all necessary parameters from your settings. If you use Microsoft Mail & News, Outlook Express or Netscape Messenger the fields will be filled automatically. Also, later the program will remember the settings you've entered.

You can be sure that the program respects your privacy and will send no other information than your image and the composed message on the Net.


Print Dialog

Use this dialog if you want to print the current image.

On the left you can see the preview of the page to be printed, while on the right there are the printing parameters you can set:

The first parameter is the printer you want to use. Select the right one if you have more than one printers.

After that press button Properties... to set the desired parameters of this printer (such as DPI, paper size, etc. - it depends on your printer). Below this button you can see where this printer is connected to and the comments entered in association with this printer.

Group Page Orientation sets the orientation of the paper you want to print to. Here you can decide if you want to print a Portrait or a Landscape image.

Groups Vertical Align and Horizontal Align helps you to place you image to certain positions on page. Option Center places the image in the middle of the page, while Left, Right, Top and Bottom moves the image to one side of the page. Custom is chosen when you freely select the position of the image by dragging it.

Group Image Size determines the size of the image. Select Original to get back the original image size, Fit to Page to maximize the image size on the page or Custom if you want to set the size by hand. You can adjust the size by entering numerical values into fields Width and Height or by interactively resizing the image on the preview field. The measurement units can also be set below these fields. The default is the inch. If switch Keep Aspect Ratio is on modifying one dimension affects the other one.

Check Draw Border if you want the program to draw a thin border around the image on the page. It can be helpful if you want to cut the print out after the process.

Text Title is displayed at the top of the page. The font can be selected in the dialog invoked by button Font.

Number of copies defines how many copies you will print.

To the left you can see the print preview that reflect the above settings. You can freely move or resize (use the little black boxes) the image with the help of the mouse.

Press Print to print the image as it is displayed on the preview, Cancel to cancel the operation or Help to get this text.


Edit Menu

There you can find some functions that help you undo / redo the latest changes, manage image selections and the Windows clipboard.

Undo ...	this function undoes the last image operation.

File operations cannot be undone or redone. If you want to get your last brush back, use function Brush / Undo.

Redo ...	Use this function if you want to redo an operation just undone.

In theory you have unlimited undo and redo operations. The only limitation is your computer's memory and free hard disk space. You can set the amount of memory / hard disk space dedicated to these functions at Options / Preferences / Undo. There is also an Undo and Redo icon on the Function bar.

Cut	exports the current image to the Clipboard from where other programs can import (paste) it. Also deletes the original selection and fills the area with the background color. If there's no selection it works on the whole image,

Copy	the same as Cut, but it leaves the original selection intact,

Paste	grabs an image from the Clipboard. You can also use other programs or the operating system to place images into the Clipboard,

Paste as new image	grabs an image from the Clipboard and puts it in a new image having the same size,

Delete	deletes the selection and fills the area with the background color.

While there are two functions that manage the selections:

Clear Selection	deletes the selection leaving the image intact.

Invert Selection	select all parts of the image that were not selected while deselecting the previously selected parts.


Brush Menu

In this menu you find methods to manipulate the current brush: change its shape, do 2D transformations or change its handle. Also use the Brush Shape Panel to alter some properties of the current brush.

The options of this menu are the following:

Undo	restores the brush to its previous shape. There is multiple undo, just like for the images, so you can undo more than one brush operation,

Redo	you can also redo multiple operations you've undone with this function,

Reset	use this function to reset the brush to the factory default. If you invoke it more than one time, it will switch between the last brush size set and the smallest 1x1-pixel shape,

Get All	makes a brush out of the whole picture. The background color will be transparent,

Get Selection	makes a brush out of the current selection. Full Selection puts the whole selection into the brush, while No background makes the background color inside the selection transparent,

Convert to Image	places the brush in a new image window,

Outline	draws a one point wide outline around the brush with the drawing color,

Halve	halves the dimensions of the brush. If you select option Both, both dimensions will be halved. Width halves only the width, while Height halves only the height of the brush,

Double	the opposite of the previous function: doubles the dimensions of the brush. You can also select which dimension to double: Both, only the Width or only the Height of the brush,

Stretch	with this function you can change the dimensions of the brush interactively. Select option

•	Both to change both width and height,

•	Both - Keep A/R to change both dimensions preserving the original aspect ratio of the brush,

•	Width or Height to change only one dimension.

Click with the brush on the picture to indicate a temporary position, then drag the mouse to change the desired dimension. The size can be seen in the status bar,

Mirror	mirrors the brush horizontally (Left-to-Right) or vertically (Top-to-Bottom),

Rotate	rotates the brush with 90 Degrees (also available by pressing Ctrl+Tab), 180 Degrees or by Any Angle. If you choose the last operation first place the brush on the picture temporarily. Drag the mouse to rotate the brush. The angle is displayed in the status bar,

Bend	bends the brush vertically (Up-and-Down) or horizontally (Left-and-Right). First place a brush to a temporary position on the picture then drag the mouse to get the desired effect,

Shear	shears the brush vertically (Up-and-Down) or horizontally (Left-and-Right). Like before, first place a brush to a temporary position then drag the mouse,

Drop Shadow...	brings up the Drop Shadow dialog where you can create a shadow to the current brush,

Handle	changes the point you grab your brush. By default it is the Center, but the Left and Right Top Corner as well as the Left and Right Bottom Corner can also be selected.


Drop Shadow Dialog

In this dialog you can enhance the current brush with a shadow.

Choose a direction from the four possible values then set the depth of the shadow. Click the Cancel button (or press ESC) to cancel the operation or the Ok button to accept the settings. A shadow with the set parameters and with the current drawing color will be dropped under the current brush. Button Help brings up this help text.


Image Menu

In this menu you will find some image transformation tools. Also this is the place where the external Adobe plug-ins and UP components doing different filtering and transformations appear.

To leave the operation simply press ESC or activate another icon or function. The options of this menu are:

Crop	puts the current selection into a new image,

Filter Factory	this function invokes the Filter Factory dialog with which you can design your own filters or import Adobe Filter Factory sources,

Custom Filter	it displays the Custom Filter dialog where you can design your own filter matrices,

Info	this is not a transformation. It gives information about the current picture and brush: it displays the picture name, dimensions, DPI and the brush size. Also if the image is associated with a file, this dialog displays the last saved file size and date. Click on the Count button to count the colors of the image or brush.

There may be other functions which were added later. They are Adobe plug-ins or UP Components and are organized into groups. These groups are displayed in the Image menu. Click on a name of a group and you will get the list of components in the group. The Adobe group is unique, there are all the Adobe compatible plug-ins Ultimate Paint has found. The directory where these filters are looked for can be set in Options / Preferences / Plug-ins.

There's an Effect Browser for each Ultimate Paint Component group. You can get help on each UP component by activating it and pressing F1 (or using the Help button).

All components have parameters, a Browse, Preset, Help, Ok and Cancel button. Most have an Effect Mode list from where you can select different modes the effect is applied on the original image. Also, most effects have a Preview button and many have an instant preview area. Set the desired parameters, and if an instant preview is displayed (Inst Preview is on), you can promptly see the changes you've made. Press the Preview button to see the changes on the whole picture (progress is displayed on the bottom left corner). Accept the settings by pressing the Ok button, or abandon them by pressing Cancel.

Use button Preset to get back the original parameter values, the Help button to get help on the current effect and the Browse button to abandon the settings and open the Browse dialog of that effect group.

You can use components written by others or even write your own one if you're familiar with programming. See the Ultimate Paint Component SDK for further information.

Adobe plug-ins are cached in order to achieve faster initialization at startup. At the Preferences panel you can also turn the search for UP Components and Adobe plug-ins off. This way the startup of UP can be further shortened, however you won't be able to use the effects unless you switch these options back.


Custom Filter

Using this dialog you can design your own 5x5 matrix filters.

The program calculates the convolution of the given matrix with the image, divides the result with the Div (Division Factor) and adds Bias to the resulting pixel.

The only thing you have to do is fill in the filter matrix, set the Div and Bias values. Press Preview to see the preview of the desired effect, Ok to accept or Cancel to abandon the filter. You can also save your filter (Save) and reload it later (Load). The provided ACF file format is Adobe Photoshop compatible, so you can also import and export Adobe custom filters. Help brings up this description.


Effect Browser Dialog

You can browse effect groups. This is similar to the Image Browser dialog, but here the current image will be scaled down and processed with each component in the group. These thumbnails will be displayed in one panel, simultaneously. If there are more images, you can resize the panel or use the scroll bar to see the rest of them. You can navigate through effects by clicking on the desired group on the tree view.

To activate a component double click on its thumbnail. To close the panel without selecting an effect, use the Close button. Help brings up this description.

The image is processed with the original settings of each component.

You cannot cache thumbnails of the effect browser like in the Image Browser dialog.


Filter Factory Dialog

This is the place where you can design Adobe Filter Factory compatible filters, load and save them, and in the final version make an UPC out of them.

Filter Factory provides easily programmable formulas to process the red, green, blue and alpha (transparency) channel of each pixel of the image. You simply write your code in the R, G, B and A boxes, and the program does the processing.

The C field contains the category of the filter, while T field contains the title (name) of the filter, A the name of the author and (c) the copyright message. These fields are only for identification and do not alter the behavior of the filter.

The expressions are entered in the R, G, B and A fields which contain the processing code for the red, green, blue and alpha (transparency) channels, respectively.

If there is a syntax error, a small exclamation mark warns you on the left side. Click on the mark if you want to locate the words containing the error.

The user can use eight different parameters to adjust the behavior of the filter when applies it. Each of these parameters has a name and a value between 0 and 255, which can all be set in the top right corner of the dialog.

Ok executes the code you have in the fields on the original image and closes the dialog. Preview shows the preview on the whole image, but the dialog won't close. Make compiles the filter into an UPC, making a compact file that can easily be distributed but its source cannot be modified. Help shows this help screen, Cancel abandons the whole operation and closes the dialog without making any modifications to the original image.

Load and Save loads an existing filter or saves the current one, respectively. The Load dialog has a preview that allows you to see the effect applied to the current image with its default settings before you load it. Scroll bar Filter lets you choose from the different filters if you select a Filter Factory Library (.ffl) file. In the Save dialog with the help of the same Filter scroll bar you can overwrite a specific filter in the library or append a new one to it (move the bar to the rightmost position).

Filter Factory programming guide and tutorial

For another source of programming Filter Factory see the original introduction / tutorial at

http://pico.i-us.com/prog/ffpg.htm

by Werner D. Streidt and Harald Heim.


Batch Convert Dialog

Use this tool to convert an image or group of images to another format.

The first step is to specify which file(s) you wish to convert. The options of panel Input Files set this:

Click on Single Image if you want to convert one image only. You can set the folder and name of the image in the input field next to the option. Click on the button containing the small folder graphics to browse for the file interactively.

Select Single Folder to convert all images in a folder. Enter the name of the folder or browse by pressing the small folder button. Check option Include Subfolders to also include all images placed in subfolders in the conversion.

Choose Multiple Folders to enter more than one folder. Press Enter after each folder specified to add it to the list, or select a folder in the list and press Del to remove it. Check option Include Subfolders to include all images of subfolders in the conversion.

Panel Output Files determines the format and naming conventions of the files converted:

Parameters under heading File Format sets the format of the output files just like in the Save as dialog:

•	the first field sets the main image format (JPEG, GIF, PNG, etc.),

•	the combo below it lists the possible number of colors,

•	switch Limit to and its numeric field allow you to limit the colors to be saved (only in case you've selected a subformat with 256 colors or less),

•	option Dither allows you to use dithering in case you use a relatively small number of colors to get better results (by mixing colors not present in the palette),

•	Transparent allows you to save the image with a transparent color (only for formats that support this feature),

•	switch Interlaced / Progressive lets you use the interlaced or progressive subformats of certain image types (e.g. JPEG, GIF, PNG),

•	slider Quality sets the quality level of lossy image formats (currently it affects JPEG only). The greater the value, the better the quality of the image will be, however also the greater the image size the program generates.

Under section File Name you can select how you want to name the newly created files.

Select Keep Original Name to leave filenames intact (and change extensions only according to the file format settings). In this case you can also determine what to do when the extension of the original image also matches: add a numeric index to the new filename so that it will coexist with the original file (Add Index If Exists) or simply overwrite the original image (Overwrite If Exists).

To generate images with totally new names you should select Give New Name and then specify the base name of the images, the starting index and the number of digits.

In case the index exceeds the number of digits specified it will continue to grow regardless of the setting.

To save all the settings you've made here click on button Save Settings. These settings can be reloaded later by using function Load Settings.

When everything is set correctly, use button Go! to start the conversion.

Button Help shows this text about the dialog, while button Cancel abandons the operation and closes the dialog.

The processing can always be cancelled by pressing the Cancel button below the progress bar. In this case the files already converted will remain in the specified folders. If there are any errors during the conversion process they will be displayed in a small list above the progress bar.


Limit Colors Dialog

With this tool you can easily reduce the colors of your image (quantize) or create a palette of the used colors.

In the Limit Colors to field enter the number of colors you want your image to be represented with. Check Save Background Color box if you want to keep the current background color as one of the used colors. Turn on the Dither Image switch if you also want your image to be dithered during the process.

Dithering the image will increase its visible quality but makes harder - if not impossible - to make any changes later, and increases the compressed image size. So apply it with care only on the final image.

The Operation parameter determines what you would like to achieve exactly. There are three possibilities:

Store Colors in Fast Palette	limits the colors of the current image to the specified number and store them in the Fast Palette,

Use Colors of Fast Palette	limits the colors of the current image using only colors of the Fast Palette. It's useful if you want to create several images with the same palette,

Create Fast Palette Only	creates a new Fast Palette only, based on the most important colors of the current image. It does not alter the image.


Desktop Menu

In this menu you can capture your desktop (or parts of it), import and export several images of your desktop:

Capture...	invoke this function if you want to capture the whole desktop or a selected window. A dialog will pop up that helps you to configure your capture settings,

Wallpaper	you can load the desktop wallpaper (if exists) or save an image as the current wallpaper. The image will be saved to the Windows directory as UPaint.bmp.

If you export more than one wallpaper, don't forget to always save the previous one under a different name, since it will be overwritten by the new one.

If you painted a new wallpaper, it will be saved as a true color image. If you loaded an existing image, it will inherit the bit-depth of the original.

Startup screen	these functions loads or saves the current startup screen. However the original clouds-behind-the-windows-logo cannot be loaded,

Waiting screen	here you can import / export the current waiting for shutdown screen.

Shutdown screen	the functions of this submenu load and save the Windows Shutdown screen.

The import functions of the last three images will double the width of the imported image to give you the aspect ratio you will see when Windows displays the image, while export functions halve it back to the original size. The saved images will have 256 colors.

You can also save whatever image you like as a Startup, Waiting and Shutdown screen, but these images will be scaled down to 320x400 regardless of the original aspect ratio and saved in 256 colors. It is recommended to use only these export functions to alter the Windows screens in order to keep the right image size and color number.


Capture Desktop Dialog

Use this dialog to capture your desktop or a selected window.

First you should set whether you want to capture the whole desktop (screen) - in this case select Whole Desktop, or only a window - in this case you should select Active Window.

The Trigger parameter determines how the capture will be triggered: with an automatic delay or by hand:

•	Select Hot Key and set the key to start the capturing by pressing a key combination.

•	If you'd rather automatically capture the selected source after a certain time elapsed, use Delay In Secs and set the delay value in seconds.

Click on button Capture to start the capturing of the desktop or a window.

Help brings up this description while Cancel abandons the whole operation.

When you click on Capture the program is minimized to the taskbar not to hide the desktop and other windows.


Options Menu

In the Options menu you can alter the outlook and behavior of the program.

Tool Bar	displays (if it's on) or hides (if it's off) the tool bar that contains the icons. If you close the tool bar you can open it again by turning this switch on. It can also be switched by pressing key F5,

Standard functions	displays or hides the Function bar (under the main menu) containing the most frequently used standard functions. You can also reach this function by pressing key F6,

Rulers	turn on or off this switch if you want to display / hide the image rulers. The measurement unit of the rulers can be set on the Interface panel of the Preferences dialog. You can also press the F7 key,

Palette	displays or hides the Palette bar. If you close the palette bar you can open it again by turning this switch on,

Brush Shape	it turns on/off the Brush Shape Panel where you can set the outlook of the brush,

Histogram	this option shows the Histogram Panel of the current image.

There are also several modes listed here which determine how the brush will appear on the image (the current one is marked in the menu):

Paint	this is the default technique: the brush is displayed with its original colors, while the color that was the background color when the brush was cut will be transparent. If this is the active technique, you can see a small P letter in the status bar,

Color	the brush will be displayed with the current drawing color. You can see a small C in the status bar,

Replace	the brush is displayed with the original colors, but the original background color also displayed. A small R appears in the status bar.

Finally you can invoke the Preferences dialog, where all important properties of the program can be set:

Preferences...	this brings up the Preferences box, where there are groups of properties under multiple categories.


Preferences Dialog

In this dialog you can alter some common behavior of the application. There are several pages, you can switch between them by pressing their label at the top.

General panel	all general options are held here,

Interface panel	contains all options in connection with the user interface,

Files panel	this panel helps you to set all options in connection with files,

Undo panel	several undo related parameters can be found here,

Plug-ins panel	contains plug-in and component related parameters,

Language panel	this panel lets you set the language of UP,

Extensions panel	use this panel to select the extensions you want to associate UP with,

Colors panel	here you can find settings in connection with fast palette handling and color displaying.

Gamma panel	here you can activate the gamma correction feature of your video card.

Skin panel	on this panel you can alter the outlook of the program.

Button Ok makes all changes permanent, Help brings up this description, Cancel abandons all changes and closes the dialog.


General Panel

In the General page you will find several general properties:

Clipping	if it's on the program ignores all drawing operations that take place outside the viewable area. The exceptions are the Image processing functions which are always operating on the entire picture. If the switch is off you can continue drawing outside the viewable area,

Optimize Brush	turn this switch on if you want to get rid of the transparent borders that may surround the brush after a brush operation. However sometimes it's handy to have a border around the brush (e.g. using the Replace Technique) in this case turn the switch off,

Instant Brush Creation	turn this option on if you want to work with brushes. The areas you cut out with the Cut Area icons will instantly be converted to brush, just like in earlier versions of Ultimate Paint (or in good old Deluxe Paint),

Show Tips at Startup	if you turn this switch on, every time you start UP it shows a useful tip.

Default Image Width	and

Default Image Height	are the dimensions of a new image created automatically when all other windows are closed.


Interface Panel

The Interface page holds options in connection with the user interface:

Resize Neighbors	if this option is active, when you resize an image by dragging its border all neighboring images will also be resized,

Flat Icons	switch this option on if you want to have Office97-style flat icons on your Tool bar and Function bar (this is the default setting). If this is switched off you will have old style icons,

Maximize Application	turn this option on if you want UP to be always maximized. The main menu as well as the images will be stretched to full screen,

Always Dock Tool bars	use this switch if you want your tool bars to be docked to the current image all the time,

Fixed Zoom for New Images	check this option and select a zoom factor if you want to open all images with the same, constant magnification. If the option is not checked, the program uses the highest zoom level with which the image still fits the screen,

Level	this determines the user's level of experience. If you set this to Novice, only the most important and commonly used parameters will be displayed in the tool bars. This way you won't get confused if you're only getting to know UP. Choose Expert if you're already familiar with the basic parameters and want to use UP in a more flexible way.

Measurement Unit	here you can set the base measurement unit of the image rulers. It can be in inches, centimeters or pixels. You can show or hide the rulers using the switch in the Options menu.


Files Panel

Backup files	switch it on if you want to create backup copies of saved files. In this case the extensions will start with '_'.

Auto load palette	turn this option on if you want UP to load the palette of images automatically (where available). The palette will be loaded to the Fast Palette area, where you can easily select colors for working on the image. Changing these colors have no effect on the image, as it is handled in true color format,

Auto reload	if this option is active, saved files are immediately reloaded. This is useful if you save files in a lossy format (e.g. JPEG) or with palette that has less colors than your original image. You can always undo the operation if you don't like the outcome,

Cache thumbnails	if you want the image browser to remember previously loaded images and not to load each image every time, you can turn this value on. UP will store small images (thumbnails) in a file placed in the directory where the images are.

File list length	this value sets the length of the most recently used file list. It is between 0 (no file list) and 16. This list appears at the bottom of the File menu.

Clear file list now	it clears the most recently used file list,

Remove inaccessible list entries	it removes only entries that can't be accessed.


Undo Panel

On the Undo page you can select the directory of undo files and set the amount of undo entries in memory and on your hard disk:

Undo in memory	set the amount of memory in megabytes you want to reserve for the undo operation. The bigger this value is the more undo phase can be stored in memory and the faster their retrieval will be,

Undo on disk	this is the amount of disk space you reserve for the undo operation. The bigger the value the more stages of work are stored to be retrieved if needed.

Directory for undo files	here you can set the location of undo files on disk. You can browse a dir with the help of the icon right to the input field. The freely available space on the current hard disk is displayed below the field.


Plug-ins Panel

The Plug-ins page contains the options related to UPCs and Adobe Plug-ins.

Use UP Components	turn this switch off if you don't want to use UPCs. It speeds up the initialization of the program, but UPCs won't be available neither in the Image menu nor on the Tool bar,

Use Adobe Plug-ins	this switch determines whether you want to use Adobe Plug-ins or not. If you don't enable this option, the initialization of the program may speed up significantly depending on the Plug-ins you have, but you won't be able to use any of them in this editor.

Adobe plug-ins location	UP will search this directory when initializing the external Adobe Plug-ins. You can also select the directory with the help of the icon right to the input field.

Plug-ins failed to load	Here you may get a list of Adobe Plug-ins that failed to load. This usually happens because these plug-ins use some DLLs. If these DLLs cannot be found on your computer, the plug-ins that need them cannot be used.

Usually plug-ins miss MSVCRT10.DLL, MSVCRT20.DLL, CTL3D32.DLL or PLUGIN.DLL. The easiest way to check which DLLs a plug-in uses is to look for the string '.dll' in its code and see what stands before it.

Some of these DLLs can be downloaded from our site.


Language Panel

Here you can select the language of the messages. The current language is marked. Select the desired language from the list and click Ok. All messages, buttons and menus will change instantly.

If you're interested in translating UP to your language, please contact us for further information.


Extensions Panel

In the Extensions page you can select the extensions you want to associate with UP. Explorer will open the checked file types with UP by default. The associations of unchecked types will be restored to their previous values.

In some cases you will find gray mark beside a file type. This means that this type has several extensions and some, but not all of them are associated with UP. If you leave this mark grayed, the associations of this type won't change.

By checking / unchecking a type that has more than one extension will affect all of them.


Colors Panel

On this panel you can set several options regarding the handling of fast palette and the displaying of color values in UP. The settings are:

Color values in Hex format	check this option if you want all the color values displayed in hexadecimal format rather than decimal. It can be useful when editing html pages.

Default Palette	here you should enter the name of the palette you want to automatically load every time UP starts. Click on the small folder icon to browse the file.

Palette files can be saved on the Fast Palette panel.


Gamma Panel

This panel helps you to adjust UP to the properties of your display.

Use Gamma Correction	switch this option on if you would like to enable the gamma correction features of your video card in UP. Be careful! Some older video drivers have bugs, so if you experience freezes or other strange behavior, turn this switch off. The gamma correction feature may also slow down displaying of images significantly.

Use Windows Defaults	turn this on if you have already set the proper gamma values globally and would like to use these settings.

Coarse Setting	if you enable gamma correction but would like to use local settings for your images, adjust this value. Set it so that the inner rectangle gets as close to its surrounding area in color as possible.

Fine Tuning	do some fine adjustments with these values for each color component.

After setting these values, all images in UP will be displayed according to the gamma of your display. It does not affect however the contents of the images, they remain the same as without this correction.


Skin Panel

On this panel you can select a skin for the program. There are several skins available, each of them contains a full, unique icon-set. The current skin is marked.

You can also design your own skins with the help of the program itself.


Window Menu

Here you can select among images currently open. You will see the index and name of each picture. Untitled is an image that hasn't been given a name and saved yet. It can be an empty one or a picture that has been created recently. The current image is marked.

Prev	switches to the previous image. It does nothing if you're at the first one already. Reach this by pressing Shift+Ctrl+Tab.

Next	switches to the next image. It does nothing if you're editing the last image already. Reach this by pressing Ctrl+Tab.

Cascade	arranges open images in a cascaded layout that all image headers can be seen.

Full Screen	use this function to see the current image zoomed to full screen on a black background. All menus and tool bars will be hidden. Click with the mouse or press a key to return to normal mode. The function can also be reached by pressing F9.

Fit to image	this function sizes the active window to match current zoom and image dimensions.


Help Menu

The Help menu contains all functions necessary to get help and to contact us.

Contents	activate it to get the contents of the available help,

Show Tip of the Day	shows the next tip of the day,

Visit HomePage	immediately takes you to the Ultimate Paint Homepage by opening a new browser window. You can also reach this by clicking on the top right corner of the About dialog,

About	brings up the About dialog with the version and credit information of UP.

You can get help on the current operation at any moment by pressing the F1 key on the keyboard.


Tool bar

On the left you can see the Tool bar. This tool bar contains the most important drawing functions. Move the mouse over a certain icon and the name of the icon is displayed.

Most icons change the current drawing mode, the few exceptions are the top left Show Brush Panel icon that displays the Brush Shape Panel, the Grid icon that displays the Grid Panel and the Clear Image icon that clears the image.

Selecting any other icon switches to a drawing mode. The default mode is Continuous freehand.

The icon of the current drawing mode is always marked.

You can repeat the operations of the current mode until you select a new mode. The few exceptions are the Cut area, Get color and Clear image operations which return to the previous drawing mode after they are completed.

You can cancel any drawing operation by pressing key Escape or by selecting another icon. In this case the result of the last operation is lost. There are several modes which have a tool bar at the top. If there are numeric fields or combo boxes and you change their values, pressing Escape or Enter closes that field first.

There are icons which contain more than one drawing operation of similar type, these icons have a small arrow in their bottom right corner. Hold the mouse down on the icon to display the possible alternatives. Select the desired icon which will be the default one of its group from now on. You can also change between subicons by pressing the hot key of the icon repeatedly. This works only if you're not in the middle of an operation.

You can draw by dragging the mouse from start- to endpoint or by simply clicking on the start point, releasing the mouse and clicking on the endpoint of the given operation.

If you hold down the Shift key while the cursor is on the image, the brush can be moved in one direction only.

Also, this is the place to change the current drawing or background color. Click on any of the small color fields to get the Color Selection dialog. You can use hot keys to change these colors: Ctrl+Shift+D pops up the Color Selection Dialog for the Drawing color, while Ctrl+Shift+B does the same to the Background color.

If you want to move the Tool bar to a new position just grab its header and start dragging it. The Tool bar will change from docked to floating state. You can dock it again on the left or, alternatively, on the right side of the image window. The bar will be docked if its frame changes its shape. If you close the Tool bar you can make it visible again with Options / Tool bar.


Brush Shape Panel

You can reach this panel by pressing icon Show Brush Panel on the Tool bar or by checking the Brush Shape switch in the Options menu.

On this panel you can change the shape, the size and other properties of the brush.

Transparency sets the transparency of the brush. The higher the value the more transparent the brush is.

Select Factory Shape if you want to use one of the two built-in brush shapes. These are:

Circular, which is also the default brush shape, and

Rectangular. Click on the appropriate icon to set it.

By default the brush size is 1x1 pixel, so you won't see much difference between the built-in shapes. You can resize the brush if you set the Size parameter to a greater value. The original 1x1 size can also be restored by pressing the dot (.) key. Press the dot key again to bring back the previous built-in brush.

Parameter Hardness determines how hard the edges of the brush are. Lower values result in a more soft, semi-transparent brush, while higher values create a brush with well-defined edges.

Select Custom Shape to open a custom brush. The Open button displays the Open Brush dialog to load a brush from hard disk. After loading the drawing mode will be switched to [image],

Button Save displays the Save Brush dialog in which you can save your current brush.

If you transform a built-in brush with the help of a Brush menu function this switch is automatically set. This also means that you cannot use the parameters of the Factory shape section to alter the brush.


Draw Freehand

In this mode you can draw freehand using the brush shape. There are three different freehand modes. If you keep the icon pressed down for a while you will get a small panel displaying all possible freehand choices. They are:

Continuous freehand - this is the default mode. Using it the curve you draw will be continuous,

Dotted freehand - here there can be gaps between adjacent brush images,

Single freehand - in this mode the brush will be placed on the picture only at the first position.

If you hold the left mouse button down while drawing, you can draw with the drawing color (or with the colors of the brush if you've already defined one), while holding down the right button will draw with the background color.

You can also reach these icons by pressing key P.


Draw Line

There are two ways to draw lines in Ultimate Paint. You can select the different modes by holding down the left mouse key on the line drawing icon. The modes are:

Single Line Mode. This is the default mode. Here you can draw separate lines giving the start and endpoint of each line,

Continuous Line Mode. In this mode as you put down the lines, each line starts where the previous one ends. So you give one start point and many endpoints. You can finish the current line by pressing ESC.

If you press the left mouse button while dragging the endpoint, you can draw with the drawing color (or with the colors of the brush if you've already defined one), while holding down the right button will draw with background color.

A tool panel also appears, where you can set parameters on how to draw lines. Mode can be

•	Continuous. This is the default mode. Here you will get a straight, continuous line,

•	Every Nth Point. In this case the line is drawn as a sequence of points, only every Nth point is drawn,

•	N Points. Here the line will consist only of N points.

N Value is the number the last two modes require. Its minimum value is 2, while the maximum is 999.

The Arrow parameter sets the type of the arrow that can appear at the end of the line. There are several possible values which determines the size of the arrow:

•	None - no arrow will appear,

•	Small, Medium, Large and Huge - different arrow sizes from very small to very big.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Draw Line or Draw Continuous Line tool won't affect the visibility of the parameters of other tools.

You can also reach the Line icons by pressing key L.


Draw Curve

There are two ways to draw curves in Ultimate Paint (similar to drawing straight lines). You can select the different modes by holding down the left mouse key

on the line drawing icon. The modes are:

Single Curve Mode. This is the default mode. Here you can draw separate curves giving the start- and endpoint of each line,

Continuous Curve Mode. In this mode as you put down the curves, each curve starts where the previous one ends. So you give one start point and many endpoints. Be careful! This doesn't mean that the curves will follow each other as one continuous curve, as there may be visible break points. You can finish the current curve by pressing ESC.

If you press the left mouse button while dragging the endpoint, you can draw with the drawing color (or with the colors of the brush if you've already defined one), while holding down the right button will draw with background color.

A tool panel also appears, where you can set parameters on how to draw curves. Mode can be:

•	Continuous. This is the default mode. Here you will get a straight, continuous curve,

•	Every Nth Point. In this case the curve is drawn as a sequence of points, only every Nth point is drawn,

•	N Points. Here the curve will consist only of N points.

N Value is the number the last two modes require. Its minimum value is 2, while the maximum is 999.

The Arrow parameter sets the type of the arrow that can appear at the end of the curve. There are several possible values which determines the size of the arrow:

•	None - no arrow will appear,

•	Small, Medium, Large and Huge - different arrow sizes from very small to very big.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Draw Curve or Draw Continuous Curve tool won't affect the visibility of the parameters of other tools.

You can also reach these icons by pressing key U.


Draw Rectangle

You may draw rectangles in four different ways. There are two icons for general rectangle drawing and two for box drawing. These icons are:

This is the default function. After defining opposite corners of a rectangle the program fills the area,

This function draws a rectangle,

Selecting this icon you can draw a filled box,

With this function you can draw a box.

The sides of rectangles are always parallel with the axes.

If you close the rectangle / box with the left mouse button, the area (or outline) will have the color of the current drawing color. If the fill mode is pattern, the filled rectangle / box will have the pattern of the brush.

Closing the drawing with the right mouse button, the area or the outline of the shapes will have the background color.

You can also reach these icons by pressing key R.


Draw Circle / Ellipse

With the help of the circle and ellipse drawing icons you can place empty and filled circles and ellipses in your picture. The submodes are:

the default method with which you may draw empty (not filled) circles,

this mode draws filled circles,

invoke this method if you want to draw ellipses,

while use this method to draw filled ellipses.

In all cases you should give the origin of the circle / ellipse first, then a point on the outline. If you close the shape with the left mouse button, the area (or outline) will have the color of the current drawing color. If the fill mode is pattern, the filled circle and ellipse will have the pattern of the brush.

Closing the drawing with the right mouse button, the area or the outline of the shape will have the background color.

If you want to draw empty circles or ellipses, the Circle / Ellipse Panel appears. Here you can set the drawing parameters. Mode can be

•	Continuous. This is the default mode, you will get an ordinary circle / ellipse,

•	Every Nth Point. In this case the circle / ellipse is drawn as a sequence of points, only every Nth point is drawn,

•	N Points. Here the circle / ellipse will consist only of N points.

N Value is the number the last two modes require. Its minimum value is 2, while the maximum is 999.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Draw Circle or Draw Ellipse tool won't affect the visibility of the parameters of other tools.

You can also reach these icons by pressing key C.


Draw Filled Freehand Shape / Polygon

There are two icons you can choose from:

Choose this icon if you want to draw a shape by hand and fill it afterwards. While you drag the mouse the contour of the shape will be drawn. If you release the mouse button the program connects the start and endpoint and fills the area.

If you used the left mouse button, the area will be filled with the current drawing color. If the fill mode is pattern, the area will have the pattern of the brush.

Drawing with the right mouse button results in an area filled with the background color.

You can draw filled polygons by activating this icon. Place the corners one-by-one, when finished place the last corner near the start point. A small marker above the cursor shows whether you're close enough. The program will connect the start and the endpoints of the polygon and fill the area.

If you draw the last edge of the polygon with the left mouse button, the area will be filled with the current drawing color. If the fill mode is pattern, the polygon will have the pattern of the brush.

Closing the drawing with the right mouse button, the polygon will be filled with the background color.

You can also reach these functions by pressing key D.


Clone Area

Copy an area of the current image to another place with this icon.

First select a brush that you want to use during the operation with the help of the Brush Shape or Cut Area icons. Then select this icon.

Define the relative position of the clone by holding down the ALT key while clicking on the image. A small X appears. Now start to drag the mouse. The area under the brush will be replaced with the area of the clone. As you move the brush, the clone moves with it. The center of the clone is always marked by that little X.

You can select the source of the clone on the Clone Bar. If you choose Clone From Original, the copied area will be taken from the image before the operation begin. When you release the mouse, the current image will become the source of the next clone operation. If you select Clone From Modified, the clone is taken from the same image you're cloning.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Clone tool won't affect the visibility of the parameters of other tools.

You can also reach this icon by pressing key O.


Fill Area

Use these icons if you want to fill a specified area of the picture or set the fill properties of different shapes. You simply have to click on an inner point of the area to be filled and the program will change all desired colors.

There are two fill modes:

Solid Fill mode - here you can fill areas with a single color. If you click on the given point of the picture with the left mouse button the fill color will be the drawing color, while if you use the right button you will fill with the background color.

Pattern Fill mode - in this mode you can fill the area with the pattern of the brush if you click with the left mouse button. The right mouse button has the same effect as in the Solid Fill mode: you will fill with the background color. If the area is bigger than the current brush the pattern will be tiled.

Parameters on the Fill panel affect the results of the fill operation:

Threshold	this is a numeric value between 0 and 765, it determines where the border of the shape is. This is a distance measured from the color of the point you've clicked on. There are neighboring points of the area already filled. The points that have a color that is nearer to the color of the starting pixel than the given distance will also be filled. So if you define a greater value here the area might be bigger.

The distance of two colors is the sum of the absolute difference of their R, G and B components. E.g. the difference of (16, 128, 51) and (47, 19, 251) is abs(16-47)+abs(128-19)+abs(51-251) = 340.

Transparency	set this value if you want to fill the given area with a semi-transparent color or pattern. The value you set here will be the transparency value of the fill color / pattern used.

8 Neighbors	turn this switch on if you want to use the 8-directions fill instead of the common 4-directions fill. This will check the distance of neighboring pixels along the diagonals, too.

Y Matching	is the option you use if you want to preserve the original brightness information of the area you fill. This way darker regions will remain dark, while brighter ones will be filled with brighter color / pattern.

Set Pattern Origin	press this button if you're in Pattern Fill mode and would like to set the origin of the brush pattern. You simply click on the desired point on the picture. It also changes the Fill Pos parameter to User Defined.

Pattern Origin	this value determines the origin of the pattern in Pattern Fill mode. The origin can be the top left corner of the picture (Top Left Corner), the origin of the brush - the place it was cut from (Brush Position) or User Defined - press Set Origin in order to define new origin.

The fill mode you select (Solid or Pattern Fill) may also affect numerous drawing functions (Draw Rectangle, Draw Circle, Draw Filled Freehand Shape / Polygon.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Fill Area or Pattern Fill tool won't affect the visibility of the parameters of other tools.

You can also reach these icons by pressing key F.


Use Spray

Activate this icon if you want to paint with spray or airbrush. You can select two different drawing modes:

Spray, with which you can get the spray effect using the current brush. It will randomly display the brush inside a circle determined by the current mouse position and the Radius parameter.

Airbrush. Use it if you want to get a finer spray effect without the brush pattern. It will gradually change the contents of the image under the mouse to the current drawing or background color.

Hold down the left mouse button to paint with drawing color / brush, or hold down the right button if you would like to paint with background color.

Although the color may be different, the Spray function always uses the shape of the brush to draw points.

By default the radius of the spray is 20 points. You can change it by entering a different value in the Radius field on the Spray / Airbrush tool bar. You may also define a new radius interactively: click on the Resize button.  First place the origin of the spray on the picture temporarily, then drag to resize it.

Change the Intensity value if you want a stronger or lighter effect.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Spray or Airbrush tool won't affect the visibility of the parameters of other tools.

You can also reach this icon by pressing key S.


Cut Area

You may use a brush in almost every drawing operation. With the Cut Area icons you can define your own custom brush or make selections that can also be converted to brush later.

If Instant Brush is on, the result of the cut operation will instantly be converted to brush, while if the switch is off, the operation will result in a new selection. Hold down the Ctrl key to add another area to the selection or the Alt key to subtract a region.

The cut operation can be carried out in several ways:

Cut a rectangle. Indicate opposite corners of the rectangle,

Cut a rectangle with predefined size. The size is visible on the Cut panel: Size X is the width of the rectangle, while Size Y is the height. Change these values to alter the rectangle size. Press the Reset button to get the original size back. The size can also be changed by pressing the Ctrl+right arrow / left arrow (increase / decrease width) and the Ctrl+down arrow / up arrow (increase / decrease height). Ctrl+PgDn / Home increases / decreases the rectangle size preserving the aspect ratio. Buttons Double and Halve double and halve the size of the area, respectively,

Cut freehand. Similar to the Filled Freehand Shape drawing function: drag the mouse around the contour of the shape you want to cut. Release the button and the area will become the new brush or gets selected,

Cut a polygon. Similar to the Filled Polygon drawing function: place the corners of the polygon one-by-one, when finished place a corner near the start point to get the new brush / selection,

Magic Wand. Here you can cut a brush by filling an area. Click on the point you want to start the fill with.

Threshold is a numeric value between 0 and 765, it determines where the border of the shape is. This is a distance measured from the color of the point you've clicked on. There are neighboring points of the area already filled. The points that have a color that is nearer to the color of the starting pixel than the given distance will also be filled. So if you define a greater value here the area might be bigger.

The distance of two colors is the sum of the absolute difference of their R, G and B components. E.g. the difference of (16, 128, 51) and (47, 19, 251) is abs(16-47)+abs(128-19)+abs(51-251) = 340.

8 Neighbors is a switch you should turn on if you want to use the 8-directions selection instead of the common 4-directions. This will check the distance of neighboring pixels along the diagonals, too.

The result of the operation will be the new brush / selection.

If Instant Brush is on

•	In the first two modes the current background color in the brush will be invisible (you may change it by selecting a different drawing Technique).

•	If you finish the operation with the right mouse button, the original place of the brush will be filled with background color.

•	After the operation the drawing mode will be switched to [image] automatically.

•	It you click on the icon with the right mouse button the brush will be restored to its previous shape. It's the same as the Brush / Restore function.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Cut Rectangle with Predefined Size tool won't affect the visibility of the parameters of other tools.

You can also reach these icons by pressing key B.


Write Text

In this drawing mode you can display text on the image. Type the text in the topmost field of the Write Text panel, then click on the image or drag your mouse to move it to the right position. You can modify the text and its properties any time during typing. Finally you should place the text on the image by clicking on the Apply button, after which you won't be able to modify the text. If Instant Brush is off, a new selection will be made around the text you've typed.

On the panel you may also alter the parameters of the text displayed. After label Font you can set the outlook of the font you want to use. Select one of the Windows True Type fonts, set the font size in points, and use any of the modifier switches (bold, italic, underlined, shadowed, outlined).

The following parameters are in the Expert Parameters group. This group can be opened / closed to save desktop space by clicking on its header.

The Align icons set the alignment (left, center, right or justified) of the paragraph. It is calculated based on the length of the widest line. The Spacing parameter defines the spacing between lines. When you set the font type or size, this parameter will be set accordingly.

If you clicked on the Shadowed button, you may set the shadow parameters, after the Shadow label: the depth of the shadow in pixels and its color. Click on the color field with the left mouse button to get the Color Selection dialog or use the right button to get a popup menu. The possible choices are:

Color dialog	displays the Color Selection dialog - just as the left mouse click,

Drawing Color	will use the current drawing color,

Background Color	the background color will be copied into the shadow color,

Pick from image	you can pick a color from the image by clicking on it.

Use switch Anti-Aliased if you want smooth font edges. Turn on switch Selection Only if you only need a selection and don't want the image to be altered.

The next parameters determine size of the text.

Although you can drag the mouse cursor to the right position on the image, it is also possible to set the position with numeric parameters more precisely after label Position.

The width and height of the text in percentages follows label Size. With these parameters you can stretch the font if needed.

The exact position of the text can be set right of the text field. The handle of the text (where to grab the text) is displayed besides the position field. The position parameter may mean the center of the text, one point on the sides or on the corners. Click on the appropriate arrow to define the handle position.

The color of the text will be the current drawing color, while the outline (if exists) will be displayed with the background color.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the line or continuous line tool won't affect the visibility of the parameters of other tools.

You can also reach this icon by pressing key T.


Get Color

Use this function if you want to get a color of a point of the current picture. You can assign this color to the drawing or background color.

Click on the desired point with the mouse. If you used the left mouse button the acquired color will be the new drawing color, while use the right mouse button to change the background color. After the operation you will get back the previously used drawing mode.

You can also reach this icon by pressing key G.


Change Color

Change a specific color of the picture to the drawing or background color with this icon. Click on the color to be changed on the picture. If you use the left mouse button the color will change to the drawing color, while if you use the right button, the color will change to the current background color.

If there's a selection on the image, the function works only on that selection.

Set the Color Threshold value of the tool bar to a distance. All colors closer to the color clicked on than this threshold will be changed. This value has the same meaning as in the Fill modes.

The tool panel can be hidden by pressing button Hide (or ALT+F1). If you hide the panel it won't appear again until you press ALT+F1 once more. Hiding the parameters of the Change Color tool won't affect the visibility of the parameters of other tools.

You can also reach this icon by pressing key H.


Grid

Most drawing operations can use an invisible, preset grid. You may switch on and off this grid by pressing this icon. If it's on, the cursor can be placed only on crossing points of this grid (grid points).

The parameters of the grid can be set on the Grid tool bar:

Brush Size	the button sets the gap between the grid points to the size of the brush,

DX, DY	these numeric values set the gap between the grid points horizontally and vertically (the density of the grid),

Set Origin	press the button to set the origin of the grid. Here you have to click on the picture to set one grid point,

PosX, PosY	set the origin by defining one grid point numerically.

You can also reach this icon by pressing key #.


Filter

There are different filter operations that can be used on the picture with the help of the current brush. They are similar to the filters that can be found in the Image menu.

After choosing the appropriate icon click on the area where you want the action to take effect. Drag the mouse while needed. Area where you dragged non-transparent parts of the brush will be affected.

You can also reach these icons by pressing key I.


Undo

This icon undoes the last drawing operation.

File operations cannot be undone. If you want to get your last brush back, use function Brush / Undo.

If you want to undo more than one operation at once, use the small arrow right to the icon. A popup list appears that contains all operations up to now. Select an entry and the program will undo all operations up to that point including the selected item. The number of operations that can be undone is limited only by the Undo memory settings on the Options / Preferences panel.

If you want to redo an operation just been undone, use the neighboring Redo icon.

With the help of these icons you can try out all your ideas effectively without risking to ruin your work.

You can also reach this icon by pressing key Alt-Backspace, or activating Edit / Undo.


Redo

This icon redoes the last operation you've undone.

File operations cannot be undone / redone. If you want to redo your last brush operation, use function Brush / Redo.

If you want to redo more than one operation at once, use the small arrow right to the icon. A popup list appears that contains all operations up to now. Select an entry and the program will redo all operations up to that point including the selected item. The number of operations that can be redone is limited only by the Undo memory settings on the Options / Preferences panel.

If you want to undo the last redo operation, use Undo again. With the help of these icons you can try out all your ideas effectively without risking to ruin your work.

You can also reach this icon by pressing key Shift-Alt-Backspace, or activating Edit / Redo.


Clear Image

The picture will be cleared to the current background color, while its size will remain unchanged if you activate this icon. If you changed your mind you can undo it by pressing [image].

You can also reach this icon by pressing key Shift+Ctrl-C.


Move Selection

If you define a selection, with the help of the [image] icon you can move it around easily. Just click on the image with the mouse and start dragging. You can also see the distance on the status bar.

The function will only move the selection, leaving the area underneath intact.

If you have Clipping switched on, only the selection displayed in the current window is moved. This way you can move parts of the whole selection carefully positioning your window.

You can also reach this icon by pressing key V.


UP Components

UP has the ability to run image functions that weren't originally included in the program. These standalone routines are called UP Components. They are single files with UPC extension, and located in the Comps subdirectory. In the program you will find them under the Image menu. You can use UP Components written by others or write your own ones if you're adventurous. However we recommend that you use only components that you're absolutely sure of being safe, working properly and not doing any harm to your system. It is completely your responsibility.

You may also find a pack of tested components attached to this version of UP.


Hot Keys

Icons

P	Draw freehand

L	Line

U	Curve

R	Rectangle

C	Circle

D	Filled shape / polygon

S	Spray

F	Fill area

T	Write text

B	Select area / Cut brush

O	Clone

G	Get color

H	Change color

V	Move selection

Shift+3 	Grid

Shift+Ctrl+C	Clear image

I	Filter

Alt+BackSp, Ctrl+Z	Undo last action

Shift+Alt+BackSp	Redo last action

Menus

Alt+F	Files menu

Ctrl+N 	New...

Ctrl+O	Open...

Ctrl+S	Save

Ctrl+F4	Close

Alt+X	Exit

Alt+E	Edit menu

Shift+Del, Ctrl+X	Cut

Ctrl+Ins, Ctrl+C	Copy

Shift+Ins, Ctrl+V	Paste

Ctrl+Del	Del

Ctrl+D	Clear Selection

Alt+B	Brush menu

.	Reset Brush

Ctrl+A	Get All (Put Image into Brush)

Ctrl+G	Get Selection

Ctrl+M	Convert Brush to Image

Shift+Ctrl+O	Outline Brush

Ctrl+H	Halve Both Brush Dimensions

Shift+Ctrl+U	Double Both Brush Dimensions

Ctrl+B	Stretch Both Brush Dimensions

Shift+Ctrl+X	Mirror Brush Left to Right

Shift+Ctrl+Y	Mirror Brush Top to Bottom

Ctrl+Tab	Rotate Brush by 90 Degrees

Ctrl+R	Rotate Brush by Any Angle

Ctrl+E	Center Brush Handler

Alt+I	Image menu

Ctrl+P	Crop

Ctrl+F	Filter Factory

Ctrl+I	Info

Alt+O	Options menu

F5	Hide/show Tool Bar

F6	Hide/show Standard Functions

F7	Hide/show Rulers

F8	Hide/show Palette

F2	Paint Technique

F3	Color Technique

F4	Replace Technique

Alt+W	Window menu

Alt+1-0	Switch to image 1..10

Ctrl+Tab	Next image

Shift+Ctrl+Tab	Previous image

Alt+H	Help menu

Misc

gray + / -	Increase / decrease Zoom

Z	Toggle zoom

Up, Down,

Left, Right	Scroll image

Home	Go to left side

End	Go to right side

PgUp	Go to top

PgDn	Go to bottom

Ctrl+Shift+D	Change Drawing color

Ctrl+Shift+B	Change Background color

.	Restore Brush to original shape

Shift+Up	Exchange Drawing and Background colors

Shift+Down	Switch displaying of colors between RGB and HSV

Shift+Home	Decrease Hue / Red value of Drawing color

Shift+PgUp	Increase Hue / Red value of Drawing color

Shift+Left	Decrease Saturation / Green value of Drawing color

Shift+Right	Increase Saturation / Green value of Drawing color

Shift+End	Decrease Value / Blue value of Drawing color

Shift+PgDn	Increase Value / Blue value of Drawing color

Ctrl+Left	Decrease width in Cut a rectangle with predefined size mode

Ctrl+Right	Increase width in Cut a rectangle with predefined size mode

Ctrl+Up	Decrease height in Cut a rectangle with predefined size mode

Ctrl+Down	Increase height in Cut a rectangle with predefined size mode

Ctrl+Home	Decrease dimensions preserving A/R in Cut a rectangle with predefined size mode

Ctrl+PgDn	Increase dimensions preserving A/R in Cut a rectangle with predefined size mode

Ctrl+L	Clipping on/off


Filter Factory Programming Guide

This is a shortened and slightly altered version of the Filter Factory Programming Guide.

The complete version of this document can be located on the following Web pages:

     Werner D. Streidt Page - http://www.fhd-stuttgart.de/~ws01/neologye.htm

     Alf's Filter Factory Compendium - http://pluginhead.i-us.com/ffc.htm

     PC Resources for Photoshop - http://www.netins.net/showcase/wolf359/fffaq.htm

     Premiere PlugIn HQ  - http://www.fortunecity.com/lavendar/kane/39/

What is Filter Factory?

Filter Factory (FF) is a plug-in for Adobe Photoshop 3.0x and above created by Joe Ternasky. The main idea of FF is to let users create their own filters and effects with an internal programming language (which resembles C) and compile them as separate plug-in files.

Programming Filter Factory

Image basics

Filter Factory basics

Constants and variables

Operators

Basic functions

Polar coordinate functions

Sliders

Misc notes

Controls of the FF dialog

Tutorial 1

Tutorial 2

Tutorial 3

Tutorial 4

Tutorial 5

Tutorial 6

Tutorial 7

Tutorial 8

Tutorial 9

Tutorial 10

Tutorial 11

Tutorial 12

Where can filters and source code be found on the Internet?

The FFDG Homepage is located at

http://pluginhead.i-us.com

Werner has an almost complete collection of codes, ideas and discussions posted in the FF mailing list. You can download it directly from

http://www.fhd-stuttgart.de/~ws01/zip/fftext.zip

There is also a Gallery collection of FF-created plug-ins at:

http://www.netins.net/showcase/wolf359/adobepc.htm

under the Plugins section. Galleries are added as plugins are created and posted to the FF Mailing List.

Alfredo Mateus' site has a FF compendium with plenty of filters and samples:

http://pluginhead.i-us.com/ffc.htm

Tatsuya Sasaki shows some interesting codes dealing with FF at

http://www.kt.rim.or.jp/~takinami

Copyright notice

Filter Factory Programming Guide

Copyright © 1996-98 by Werner D. Streidt and Harald Heim.

Adobe Photoshop and Adobe Premiere are trademarks of Adobe Systems, Inc. All rights reserved.

No part of this tutorial may be reproduced in any form or by any means without written permission of the author. The authors of this document have used their best efforts in creating it. However, the author makes no warranties of any kind, express or implied, with regard to the documentation or filter codes contained. In no event shall the author be responsible or liable of any loss of profit or any commercial damages in connection with the use of this document or filter codes.


Image Basics

The following section will help you understand what pixels and RGB are.

Painting programs are pixel-based programs. Images edited here are usually scanned pictures or painted with different tools. Your image's width and height are always measured in pixels. E.g. a common image has the width of 320 pixels and the height of 240 pixels. The top left corner is the origin of the image (0, 0), while the top right corner has the coordinates of (319, 239).

Each pixel contains a color information and all pixels have the same width / height. Color TVs, computer monitors and scanners work all with RGB (red, green and blue) values. All colors are mixed out of these basic ones using additive mixing. Some examples are:

no colors added: results in black,

red + green = yellow,

red + blue = magenta,

green + blue = cyan.

So each color is a mixture of basic colors. Each of these color values are between 0 and 255. Every pixel has 4 values (the red, green, blue and transparency values). The red values of the image are called the red channel, green values are the green channel, while blue values are the blue channel. Each pixel has an additional alpha value - between 0..255 - which represents the opacity / transparency of the given pixel: 0 means no opacity (full transparency) and 255 means full opacity.

Next: Filter Factory basics


Filter Factory Basics

When Filter Factory is activated to modify/create your image, it will start by scanning each pixel, from left to right, from top to bottom. You will be creating an algorithm which will always depend on the pixel position. It does not matter if you use the actual pixel information (modifying your image) or overwrite it with another value (creating a new image). In FF you can't create loops, meaning you have to create a very compact code as one line. Multiple commands are not allowed either (with the exception of get and put).

As a color value of one pixel can only be between 0 and 255, if a code returns a number bigger than 255, it will be limited to 255, or if it's less than 0, will be limited to 0.

One very important thing is that FF always returns integers. FF is also case sensitive, meaning that x and X return two different values. You can include spaces and carriage returns without affecting the code. You will only get an error if you have a typo in your code.

On the upper left side you can see a preview window. To the right there are eight sliders and eight input fields for their respective names. In the middle there are three fields. These are where you type in your code. Notice that FF already puts on startup the variables r, g, b on their respective channel coding areas. Below the preview window there are several general parameters of the filter (name, author, etc). On the bottom you can see buttons.

Next: Constants and variables


Constants and Variables

Constants are numbers you can use in FF. Examples are -5, 2, 55, 1000, 10+5, 55/2, etc. If you like to work with hexadecimal values, you should prefix the numbers with 0x, for example 0xaa (176 decimal), 0xf65 (3941 decimal), etc.

Variables are numbers which constantly change in their value. When you use variables, they will return values. Following variables and their return values can be used in the FF-code:

r	returns the red channel value of the current pixel ,

g	returns the green channel value of the current pixel,

b	returns the blue channel value of the current pixel,

all of the above return a value from 0 to 255.

c	returns the color value of the current pixel in the current channel, would be the same as typing either r, g or b in their respective coding areas or using src(x,y,z) (see later).

x	returns the x-coordinate (horizontal position) of the current pixel. Can be an integer from 0 to X-1,

y	returns the y-coordinate (vertical position) of the current pixel. Can be an integer from 0 to Y-1,

X	returns the width of the current image. X can be an integer from 1 to 16384,

Y	returns the image height. It can be an integer from 1 to 16384.

i, u, v	return the i,u,v values of the current pixel in YUV space (which is a different color space than RGB). i can be an integer from 0 to 255, u can be an integer from -56 to 56, and v can be an integer from -78 to 78.

V	is constant 255.

z	returns the channel index of the current pixel in the code area. Can have a value between 0 and 2, depending in which code area this variable is used. 0 means red, 1 means green, while 2 means blue,

Z	returns the total amount of channels. This is 3 in UP (r,g and b).

d	returns the angle (direction) of the current pixel from the center of the image. It can have a value from -511 to 512 (see Polar coordinates),

dmin	returns 0,

D	returns the total amount of angles within the image. It is always 1024.

m	returns the magnitude (distance) of the current pixel from the center of the image. It can be an integer greater than 0,

mmin	returns 0,

M	returns the total amount of magnitudes in the image. It is an integer half the diagonal size of the image.

Next: Operators


Operators

Following operators can be used in the FF-code:

Arithmetic operators

+	adds two numbers, variables

-	subtracts second number from the first

*	multiplication

/	division

%	modulo. Dividing one number with another you always have a remainder of 0 or greater. The modulo operator returns this remainder. E.g. 10%3 would return 1.

All of the above operate on signed 32-bit integers.

Logical operators

&&	logical AND (between two expressions). Returns 1 if both expressions are not equal to 0, or 0 in any other case,

||	logical OR (between two expressions). Returns 1 if one or both expressions are not equal to 0, or 0 in other cases,

!	logical NOT (for use with one expression at the right),

==	equals to (between two expressions),

!=	not equal to (between two expressions),

>	greater than (between two expressions),

<	less than (between two expressions),

>=	greater than or equal to (between two expressions),

<=	less than or equal to (between two expressions),

All of the above will return a 0 or 1, meaning: 0 false, 1 true.

Logical operators can be best used with conditional operators. Example: r==5 will return 1 if the red pixel value equals 5, or will return 0 if the red pixel value does not equal 5.

Bitwise logical operators

&	bitwise AND (between two expressions),

|	bitwise OR (between two expressions),

^	bitwise XOR (exclusive OR) (between two expressions),

~	bitwise NOT (before one expression).

Shifting operators

<<	shifts left (multiplies by 2),

>>	shifts right (divides by 2).

These operators move the bits of a value to the right or left. This is described by a logical shift. b<<3 will take the blue value of the pixel and shift it 3 times to the left. If the value was 30 (binary 00011110), for example, the result will be 240 (11110000).

Conditional operator

?:	question mark and colon

This could be seen as an IF condition THEN value ELSE value expression. First, you create a condition (e.g. r>120 means: is the red value greater than 120?) before then question mark. If the condition is true, the code before the colon is evaluated. If the condition is false, the code after the colon is evaluated and given back.

a) Example: r>120 ? r-50 : r+50

Above example will test the red value of the current pixel if it is greater than 120. If it is, the intensity of the red channel is lowered (r-50), if the value is less than or equal to 120, the intensity is pushed up by a value of 50.

b) Nesting (Condition in a condition) is allowed

r>120 ? (g<120 ? r+10 : r-10) : (g<120 ? r+20 : r-20)

If the red value of the current pixel is greater than 120, then the green channel is tested if less than 120. If it is not, then the red value is lowered by 10. This means that the amount changed in the red channel depends on the green channel value.

c) More conditions

(r<120 && x>120) ? 50 : 100 is put in the green coding area

If the red channel value is less than 120 AND the pixel position is greater than 120, then the green

channel value is set to 50, otherwise set the green channel value is to 100.

Comma (,) operator

The comma separates two or more expressions, evaluates both but returns the last one. This is mostly used when working with the get and put functions. One or more put-functions save the algorithm's return code into an internal memory, whereas the get-function load the saved numbers into memory again.

For example, when part of the code is used many times, you can put the code into memory once and load it with the get function many times. This can speed up longer calculations significantly.

Remark

Use // to place a remark in your code. After // the rest of the current line of the channel code is ignored.

Next: Basic functions


Basic Functions

Now everything will get a bit more complicated (but more interesting, too). If you are a novice to FF, it is recommended to experiment with each function separately in order to fully understand what it does. We will try to explain each function in these sections and in the tutorial sections thoroughly, so you can start experimenting without doubts right away. The variables used here are only placeholders, it does not mean that the functions only work

with them.

abs(a)	returns the absolute value of a. If a=-50, a value of 50 is returned,

add(a,b,c)	adds a and b together, compares the result with c and the lesser value is returned,

cnv(m11,m12,m13,m21,m22,m23,m31,m32,m33,d)

the convolver is similar to the Custom Filter in UP. Each pixel and its eight neighboring pixels are multiplied with the proper m?? values to get a new result. The map looks like this:

m11 m12 m13

m21 m22 m23

m31 m32 m33

The target pixel is the one in the middle (m22). Each m??-value is multiplied with the pixels corresponding to the map (this is called weighting), all values are added together and divided by d (generally is d the total amount of the weights). E.g.

cnv(0,1,0,1,4,1,0,1,0,8) blurs your picture,

cnv(1,1,1,0,0,0,-1,-1,-1,1) neon kind of effect,

ctl(i)	It returns the value of slider i (between 0 and 7): an integer between 0 and 255,

dif(a,b)	subtracts b from a and returns its absolute value,

get(i), put(v,i)	FF has internally 256 cells, where you can store and request values. put(v,i) will evaluate the expression v and store the result in cell i. get will return the result in cell i.

r: put(src(X-x,Y-y,z),0),get(0)

g: get(0)

b: get(0)

Here you don't have to write r:, g: and b:, they're only indicating which field the given code belongs to.

As you can see, the image is mirrored horizontally and vertically, whereby the values are taken from the red channel and stored in cell 0. Finally, all code areas request the value of cell 0. Note that your image will turn grayscale (because only red channel values were stored, and green and blue channel values were ignored),

map(i,n)	obsolete function retained only for compatibility reasons,

max(a,b)	returns the larger value, either a or b,

min(a,b)	returns the lesser value, either a or b,

mix(a,b,n,d)	calculates expression a*n/d + b*(d-n)/d. The two input values (a,b) are combined with the fraction n/d. If the fraction is close to 0, b is returned. If the fraction is close to 1, a is returned. If the fraction is close to 1/2, the average of a and b is returned,

rnd(a,b)	returns a random number between a and b, where a < b,

rst(a)	sets the seed of the random generator to a. As this generator is only pseudo-random, it has a seed that somehow determines the next value of rnd, so if you set a certain value again and again, you can be sure that you will get the same value calling rnd (which is however won't be equal to the seed),

scl(a,il,ih,ol,oh)	the scale function maps the value a from an input range (il, ih) to an output range (ol,oh). scl(r,0,255,100,200) will evaluate the red channel value of the current pixel. According to the scale function, values near 0 will become 100 and values near 255 will become 200. Similarly, a value of 128 will turn into 150.

sqr(x)	returns the square root of x,

src(x,y,z)	returns the channel pixel value in coordinates x,y in channel z, whereby the return value equals an integer between 0 and 255 src(400,200,z) will return the pixel value at 400/200 in the current channel and src(x,y,z) equals variable c,

sub(a,b,c)	difference between a and b (absolute value), compares the result with c and the greater value is returned,

val(i,a,b)	It returns the value of slider i (0..7) projected onto the interval [a, b].

Next: Polar coordinate functions


Polar Coordinate Functions

Before explaining the functions, you should have some knowledge on polar coordinates. As you know, Cartesian coordinates have the origin on the top-leftmost pixel of our image (0,0). The origin of polar coordinates is in the center of the image, which is (X/2, Y/2).

Cartesian coordinates are defined by a horizontal position (x) and a vertical position (y). Polar coordinates are defined by an angle (d for direction) and a magnitude (m) (radius or distance from the origin, i.e. from the image center).

Notice that the angle d can be any positive or negative integer (0 inclusive). A value of 1024 means a full rotation, while multiples of 1024 (2048, 3072, 4096, etc.) mean multiple rotations. The magnitude m can be an integer from 0 to M (half the diagonal image size). There are ways to convert Cartesian into polar coordinates and vice-versa.

Cartesian-polar conversion

This means we have the x and y coordinates and convert them to d and m, i.e. horizontal / vertical coordinates to direction / magnitude conversion. The length of the hypotenuse (distance or magnitude) is the square root of the sum of x squared and y squared. The angle (direction) is the arctan of y divided by x.

Polar-Cartesian conversion

Now we have d and m and want to convert these to x and y. The cosine of the angle is the x-length divided by the magnitude. In order to get x, we multiply the cosine of the angle with the magnitude. The sine of the angle is the y-length divided by the magnitude. So in order to get y, we multiply the sine of the angle with the magnitude.

Functions

c2d(x,y)	This returns the direction (angle) of the pixel at (x,y) from the top left corner (0,0). Mathematically, this is the arctan of y divided by x. Values returned are integers from -512 to 512.

c2m(x,y)	Returns the magnitude (distance) of the pixel at (x,y) from (0,0). Mathematically, this sums the squared values of x and y and returns the square root. The values returned are integers from 0 to M*2.

cos(x)	Remember trigonometry and terms like amplitude and wavelength? Let's picture a full wavelength from 0 to 1024. The value returned is an integer between -512 and 512. Cos(0) returns full amplitude (512), while cos(256) returns 0, cos(512) returns -512, cos(768) returns 0 again and cos(1024) returns 512. Values greater than 1024 start the whole thing all over again.

r2x(d,m)	This returns the x-coordinate of polar coordinate (d,m).

r2y(d,m)	This returns the y-coordinate of polar coordinate (d,m).

rad(d,m,z)	This function resembles the src(x,y,z)-function in Cartesian coordinates. rad(d,m,z) returns the pixel value that is m pixels away at the direction of d from the origin (which is the center of the image here). Using rad(d,m,z) is the same as using src(x,y,z) or simply c.

sin(x)	Works the same way as cos(x), returns an integer between -512 and 512. Sin(0) returns 0, sin(256) returns 512, sin(512) returns 0, sin(768) returns -512 and sin(1024) returns 0.

tan(x)	Works almost like cos(x) and sin(x), returning an integer between -167 772 and 167 772 (instead of going to infinity). tan(0) returns -6, tan(255) returns 167 761, tan(256) returns -167 772, tan(512) returns 6, and everything starts all over again.

Next: Sliders


Sliders

Creating filters with one option is boring. Sliders were included to give user control over the input. There are eight sliders you can use in FF, they are referred to as controllers. You can access the values of the sliders with the function ctl(i), where i is a value from 0 to 7 and the value returned is an integer between 0 and 255. So i=0 refers to the first slider, 1 to the second, while 7 to the eighth. You can also assign a name to each slider (left to the slider).

It seems that having slider values between 0 and 255 won't help much. However with the val(i,a,b) function, you can give slider i the range from a to b (b can also be lesser than a). Note that ctl(i) and val(i,a,b) are two different functions which returns slider values. E.g. ctl(2) will return an integer from 0 to 255, depending on the slider 2 setting, while val(2,-128,128) will map this value to the [-128, 128] interval.

Next: Misc notes


Misc Notes

The red exclamation marks

While typing you might see a red exclamation mark beside the current field that appears / disappears. This mark tells you simply that the code you typed as of your last key press has a syntax error. Check the parentheses, commas, and the upper- or lowercase functions / variables.

Pressing Ctrl-Z will undo your last typing in the boxes. Pressing Tab will get you to the next, Shift-Tab to the previous text field. You can cut and paste text to and from the clipboard using Shift-Del and Shift-Ins.

There might also be some semantical errors in your code. Check the values in your code, for example ctl(20) won't work, as there is no slider 21.

Limitations

Filter Factory is memory-hungry. You should have at least twice the virtual memory needed to store the image to be processed (well, this is also true for all UPCs).

So if you have a memory problem make sure that the clipboard is empty, no snapshot is in memory and no other images are opened. If you still have problems you have to try to do the filtering in two or more parts.

The Filter Factory of UP limits the compiled code in 4 KB per channel. To work this around try to eliminate common sub-expressions (with the help of the get/put functions and the comma operator): evaluate parts of the expression that need to be calculated more than once, put them into anonymous variables (put) and then read them back when needed (get).

Precision

Filter Factory calculates with integer mathematics. This speeds calculations up, however it has some side effects. Especially on filters that use sine / cos / tan functions you will discover stairs that gives the processed image a jaggy look (it is also called aliasing). Unfortunately there is no way to solve this problem other than to apply a blur after applying the FF filter.

Also because of the integer arithmetic, always multiply first and divide only after that to save precision as fractions are lost after division operations.

Slider limitations

The sliders do always show values between 0 and 255, no matter what your filter needs or what do you do inside your FF code. Also, the resolution can't be increased over 256 steps.

Next: Controls of the FF dialog


Controls of the FF Dialog

The preview window

The preview window is at the top left corner of the dialog. Here you will immediately see all changes you make in the code or in slider values. This window is generally smaller than your image, which in some cases may result in quite different effect on the preview and on the original image. You can correct this by using the X, Y and M variables (see tutorial section on code optimization).

After writing your code don't forget to name the sliders used (all sliders that don't have a name will be excluded from the final compiled code, so their values cannot be controlled!). Use a name that will tell the user what the slider does (e.g. 'radius', 'line color', 'amplitude', etc.). These names can be typed into the input fields placed right to the preview window and left to the sliders themselves.

Before saving and/or compiling your filter also fill in the Category, Title, Author, Copyright fields.

Category is ignored in UP, but it is what you first see when you click on the Filter menu of most FF hosts. It can be a completely new name, a name that is related to the task (blur filter, stylize, etc.).

Title is the actual name of the filter. Give a name that will tell a newbie right away what it does.

Author is the place of your signature or the signature of the one who created the filter.

Copyright is obvious. Type the copyright (if you are the author) or type the one suggested by the author.

These data will be saved along with the source.

Saving the filter code

Saving the code is fairly easy. Press the Save button and enter the name of the code data file in the save dialog that will appear (the extension will be .afs). It is advisable to create a new directory (for example FFCODE or AFS) and save all data there. Although UP saves slider names, Category, Title, Author and Copyright texts in the .afs file, most of the FF host programs do not. Be careful not to lose these valuable information.

Loading the filter code

Loading the code is easier. Simply press the Load button and select the code data file. The channel data and all common information will be loaded.

Creating a new UP Component

First enter the filter data or load a previously stored filter. Check the syntax (should be no exclamation marks). Don't forget to name all sliders used (this tells UP that the component should display them). Finally press the Make Button. Now a save dialog is displayed. Just enter the directory you want to save the filter and type in a filename.

Now all you have to do is press either Cancel or OK. Pressing OK will create the component and save it. You must however, exit the program and restart it in order for it to recognize the new component(s).

Next: Tutorial 1


Tutorial 1: Simulating Program Solutions

You've learned so far what Filter Factory can do, what values it will return and its limitations. On the following pages solutions are given by explaining the objective. Then the code is given to each channel. Should you encounter the format: r,g,b: then you simply have to type the code in all three coding areas, r, g and b. If a slider is used, its function is mentioned after the code.

Here we will try to simulate functions already built in. This might give you a better understanding of basic image data manipulation.

Invert the image

r: 255-r

g: 255-g

b: 255-b

we could also use

r,g,b: 255-c

Mirror the image horizontally

r,g,b: src(X-x-1,y,z)

Mirror the image vertically

r,g,b: src(x,Y-y-1,z)

Rotate the image 90 degrees clockwise

Attention: works properly only on squared images!

r,g,b: src(y,X-x-1,z)

Rotate the image 90 degrees counter-clockwise

Attention: works properly only on squared images!

r,g,b: src(Y-y-1,x,z)

Rotate the image 180 degrees

r,g,b: src(X-x-1,Y-y-1,z)

Desaturate the image

(turns it into RGB-grayscale)

r: put((76*r+150*g+29*b)/256,0),get(0)

g,b: get(0)

or simply:

r,g,b: i

Next: Tutorial 2


Tutorial 2: Creating Blends (Gradient Fills)

Linear blends

Please work with a 512x512 picture for this tutorial. When examining our pixel values in a blend, we see that the values are consecutive. Let's say, we have a grayscale image and we want a horizontal blend from black (0) to white (255). We could use the pixel positions (x,y) in order to create a pixel value for a blend. Let's create a black to white blend in an RGB image:

r,g,b: x

Problem is, if our image or selection width is greater or less than 256, then we would get a not quite complete blend. So, we need also the image's width information (X). In order to create a smooth blend from left to right in any image, we would use this code:

r,g,b: x*255/X

or

r,g,b: scl(x,0,X-1,0,255)

Now, let's say we need multiple blends. A way to do it is with the MODULO operator:

r,g,b: x%256

While the pixel position rises, we get consecutive numbers... 0, 1, 2, 3, ....254, 255, and now it starts all over again... 0, 1, 2, 3, 4, 5... Thus, we have two (512/256) black to white blends in our image. Do we want more blends?

r,g,b: x%128*2

Now we have four blends (512/128), but because the maximum value the modulo operator can return is 127, we have to multiply it with 2 (127*2=254), so we can see a nice contrast blend. You could also use following code:

r,g,b: scl(x%128,0,127,0,255)

If you watch the math while doubling the amount of blends, you would notice the following rule:

x % (256 / no of blends ) * no of blends

The code where we control the amount of blends with slider 0:

r,g,b: x%(256/ctl(0))*ctl(0)

Now, if you want - with one filter - be able to create either horizontal or vertical blends, use slider 1 to control the blend movement:

r,g,b: ctl(1)<128 ? x%(256/ctl(0))*ctl(0) : y%(256/ctl(0))*ctl(0)

The problem is that the amount of blends is not the value selected in slider 0. Now we also need the image's width (X). Remember, we used the following code for a blend in an image any size:

x*256/X

Now we want two blends. If we multiplied the code with 2 (result would be a value from 0 to 512) and use here our modulo operator (so we can have blends from 0 to 255):

r,g,b: (x * 512 / X) % 256

If we want four blends, we would need the following code:

r,g,b: (x * 1024 / X) % 256

The user can also use slider 0 to input his desired number of blends:

r,g,b: (x * 256 * ctl(0) / X ) % 256

If you want white-black blends instead of black-white, use

r,g,b: 255-(x*256*ctl(0)/X)%256

Again, if you need the possibility of selecting either horizontal or vertical blends, use slider 1:

r,g,b: ctl(1)<128 ? (x * 256 * ctl(0) / X ) % 256 : (y * 256 * ctl(0) / Y ) % 256

where

ctl(0) is the exact amount of blends,

ctl(1) is the selector of horizontal / vertical blending.

The following one combines everything together:

Name: Blender (V/H)

r,g,b:

(ctl(1)<128)?

(ctl(2)<128?(x*ctl(0)*256/X)%256:255-(x*ctl(0)*256/X)%256):

(ctl(2)<128?(y*ctl(0)*256/Y)%256:255-(y*ctl(0)*256/Y)%256)

where

ctl(0) exact amount of blends,

ctl(1) horizontal/vertical blending,

ctl(2) black-white / white-black blending.

It's nice to have these blends, but they are all black & white. We can dispose now of the black-white / white-black blending method, leaving a black-white

blending only:

r,g,b: ctl(1) < 128 ? (x*ctl(0)*256/X)%256 : (y*ctl(0)*256/Y)%256

where

ctl(0) exact amount of blends,

ctl(1) horizontal/vertical blending.

We will use the 6 available sliders for our blend coloring. In order to do that, we will use the scl(a,il,ih,ol,oh)-function. We know that the resulting values are integers between 0 (il) and 255 (ih). If you examine the red channel code, you'll see that the lowest value is turned into the slider 2 value and the highest value is turned into the slider 3 value.

Category: Neology

Title: HV-Blender

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r: scl(ctl(1)<128?(x*ctl(0)*256/X)%256:(y*ctl(0)*256/Y)%256,0,255,ctl(2),ctl(3))

g: scl(ctl(1)<128?(x*ctl(0)*256/X)%256:(y*ctl(0)*256/Y)%256,0,255,ctl(4),ctl(5))

b: scl(ctl(1)<128?(x*ctl(0)*256/X)%256:(y*ctl(0)*256/Y)%256,0,255,ctl(6),ctl(7))

where

ctl(0) No. of blends,

ctl(1) horizontal / vertical blending,

ctl(2) red amount of starting blend value,

ctl(3) red amount of ending blend value,

ctl(4) green amount of starting blend value,

ctl(5) green amount of ending blend value,

ctl(6) blue amount of starting blend value,

ctl(7) blue amount of ending blend value.

Radial blending

Remember, there is a variable called magnitude m (or distance from the

image/selection center). Here we will use a 512 x 512 picture again.

r,g,b: m

This will give us a radial blend from the black in the center to white outwards. Let's use multiple blends with m % 256, but as we can't see much, let's give it more blends:

r,g,b: m * 8 % 256

And because it's so cool using sliders for blend amount and coloring, let's jump right into it:

Category: Neology

Title: Rad-Blender

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r: scl(m*ctl(0)%256,0,255,ctl(2),ctl(3))

g: scl(m*ctl(0)%256,0,255,ctl(4),ctl(5))

b: scl(m*ctl(0)%256,0,255,ctl(6),ctl(7))

where

ctl(0) Blend amount,

ctl(2) red amount of starting blend value,

ctl(3) red amount of ending blend value,

ctl(4) green amount of starting blend value,

ctl(5) green amount of ending blend value,

ctl(6) blue amount of starting blend value,

ctl(7) blue amount of ending blend value.

Rotational blending

To have the blends rotate around the center like a helicopter propeller, we have to work with the angle (direction) d. Problem is, d returns values from -512 to 512, so we can scale it from 0 to 1024. Then we use our modulo %256 and finished.

r,g,b: scl(d,-512,512,0,1024) % 256

To make a user controlled amount of blends, we'll have to change the last term in the scl function. The above function gives us four blends. So, it should read as follows:

r,g,b: scl(d,-512,512,0,ctl(0)*256)%256

And because it' so nice using sliders for blend amount and coloring...

Category: Neology

Title: Rot-Blender

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r: scl(scl(d,-512,512,0,ctl(0)*256)%256,0,255,ctl(2),ctl(3))

g: scl(scl(d,-512,512,0,ctl(0)*256)%256,0,255,ctl(4),ctl(5))

b: scl(scl(d,-512,512,0,ctl(0)*256)%256,0,255,ctl(6),ctl(7))

where

ctl(0) Blend amount,

ctl(2) red amount of starting blend value,

ctl(3) red amount of ending blend value,

ctl(4) green amount of starting blend value,

ctl(5) green amount of ending blend value,

ctl(6) blue amount of starting blend value,

ctl(7) blue amount of ending blend value.

Next: Tutorial 3


Tutorial 3: Creating Checkered Tiling

Imagine 2x2 squares, each of them is 5 pixels wide and 5 pixels high. There are two different squares: white and black ones. The first line (y=0) of this image gives us 255 (white) for the first 5 pixels (0 <= x < 5), and 0 (black) for the last 5 pixels (5 <= x < 10).

Let's take an expression x%10, which returns the following values as we move from pixel to pixel on a larger image:

0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,....

We would like to fill the pixels with white and black. This can be done with the

following code

r,g,b: (x % 10) < 5 ? 0 : 255

We can also work with boolean maths. For (x%10)<5 Filter Factory will return 1 if it's true, 0 if false. Multiplying it with 255 will return values either 0 or 255:

((x%10) < 5) * 255

The vertical code would look like the same but only with y instead of x. How to combine both? We use the exclusive OR (XOR) operator in our expression:

((x % 10) < 5) ^ ((y % 10) < 5)

Now the whole thing multiplied with 255 returns the values 0 or 255:

(((x % 10) < 5) ^ ((y % 10) < 5)) * 255

What if we want the first square to be white and not black? There are two possible solutions. The easy one:

(((x % 10) >= 5) ^ ((y % 10) < 5)) * 255

and the boolean one:

(!((x % 10) < 5) ^ ((y % 10) < 5)) * 255

That's it!

Sliders representing pixel values

Let's say we would like to use sliders to tell Filter Factory how thick each checker cell is (in pixels). In our code

((x % 10) < 5)

the first number represents the width of two cells and the second number the width of one cell. Thus, our code with a slider would look like this:

(!((x % (ctl(0)*2)) < ctl(0)) ^ ((y % (ctl(0)*2)) < ctl(0))) * 255

Note: There is also a radial kind of checker tiling you may want to try:

(!((m % (ctl(0)*2)) < ctl(0)) ^ (((d+512) % (ctl(0)*2)) < ctl(0))) * 255

Sliders representing the total amount of cells in a row / column

This one's a bit tougher. The slider setting has to be converted into a cell width/height. Thus, dividing the width (X) of the image with the number of cells (ctl(0)) would result in the following code: X/ctl(0). Let's say the image is 512 pixels wide and we have a slider setting of 8. X/ctl(0) = 512/8 = 64. Each cell is 64 pixels wide. The complete code would be:

Category: Neology

Title: Checkered Tiling

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r,g,b: (!((x %( X/ctl(0)*2)) < (X/ctl(0))) ^ ((y % (Y/ctl(0)*2) ) < (Y/ctl(0))))* 255

where

ctl(0) is the number of cells in a row / column.

Note: You'll notice that sometimes you'll get partial cells at the right / bottom. This is due to the fact that the image's width and/or height is not a multiple of the slider setting. To visualize this problem create a new image with 500x500 pixels and another one with 512x512 pixels. Use the filter with a setting of 8. The partial cells will appear on the 500x500 image, because 500 divided by 8 results in 62.5.

Next: Tutorial 4


Tutorial 4: Adding Borders to Your Images

There are different possibilities for creating interesting borders in your images. Let's start with a very simple task of creating a black border that is 5 pixels wide. Since our border has four sides, we have to check the current position while scanning the image:

r,g,b: (x<5 || x>X-6 || y<5 || y>Y-6) ? 0 : c

the code says: IF we are on an x-position less than 5 (0, 1, 2, 3, 4) OR on a x-position greater than X-6 (e.g. in a 20x30 image this would be: 15, 16, 17, 18, 19) OR on a y-position less than 5 OR on a y-position greater than Y-6 (24) THEN fill these pixels with black (0) ELSE use the original pixel value (c).

Let's add a slider for the border thickness (notice that the parentheses before the question mark aren't needed; this is because all || (OR) are of higher priority than the ?):

r,g,b: x<ctl(0) || x>X-1-ctl(0) || y<ctl(0) || y>Y-ctl(0)-1 ? 0 : c

where

ctl(0): Border thickness (in pixels)

An interesting feature would be to invert the border and reuse the filter with different border thickness. The code to invert the border would look like this:

r,g,b: x<ctl(0) || x>X-1-ctl(0) || y<ctl(0) || y>Y-ctl(0)-1 ? 255-c : c

Back to our original code, black is nice but boring, users need colors, so we will use sliders:

r,g,b: x<ctl(0) || x>X-1-ctl(0) || y<ctl(0) || y>Y-ctl(0)-1 ? ctl(z+1) : c

where

ctl(0): Border thickness (in pixels)

ctl(1): Red value for border

ctl(2): Green value for border

ctl(3): Blue value for border

Notice how we used ctl(z+1). The slider value depends on the channel value.

Next: Tutorial 5


Tutorial 5: Casting a Shadow

The idea is to create a shadow on the left and top of the image or selection and

move the image data (in the selection) by a certain amount of pixels. The effect would be like having two equal images, one above the other, while the top one has a cut out area, so you can view the image beneath.

To achieve this, we have to apply four different codes:

a) applying the left shadow,

b) applying the top shadow,

c) applying no shadow,

d) applying both shadows (top + left).

And on all of them, we should move the pixels by a slider value, which will be the amount of shadow.

To make things easier, let the shadow be 10 pixels wide. The first thing we do is to test whether we're in section c (where should be no shadow applied):

(x>9 && y>9) ? c : (cont)

if so, we use the current pixel value, or ELSE... we test whether we're in section a (apply the left shadow):

(x<10 && y>9) ? ... : (cont)

if so, we will multiply the blend with the pixel information and divide it by 255. Because x is between 0 and 9 here, we have to use the scale function:

scl(x,0,9,100,255) * c / 255

The above code will create a 10 pixel wide blend from 100 to 255 in the first ten pixels while using

image data as well. So the complete code for section a looks like

(x<10 && y>9 ) ? scl(x,0,9,100,255) * c/255 : (cont)

Now let's check section b (apply the top shadow), which is the same as a, only we use the y coordinates:

(x>9 && y<10) ? scl(y,0,9,100,255) * c/255 : (cont)

The last part section d (apply both shadows) has to combine both shadow blends and the image data underneath.

The function we use for this is min(x,y), which will return the lower value:

min(scl(x,0,9,100,255),scl(y,0,9,100,255))

Combined with the image data:

min(scl(x,0,9,100,255),scl(y,0,9,100,255))*c/255

Now we got all parts, all we have to do is combine them all:

(x>9 && y>9) ? c :

(x<10 && y>9 ) ? scl(x,0,9,100,255) * c/255 :

(x>9 && y<10 ) ? scl(y,0,9,100,255) * c/255 :

min(scl(x,0,9,100,255),scl(y,0,9,100,255))*c/255

If you use 0 instead of 100 for creating the shadow, you'll get a strong shadow. If you use a greater number, the shadow will be softer. (Maybe you should let the user manipulate it with a slider).

All we need now is to add the slider to specify the shadow's width, which will also offset the image or selection by the specified amount. The code to offset the image data would be to change all c variables (remember, using c is the same as using src(x,y,z)) to src(x-ctl(0),y-ctl(0),z).

So here's the complete code:

r,g,b: (x>ctl(0)-1 && y>ctl(0)-1) ? src(x-ctl(0),y-ctl(0),z) :

(x<ctl(0) && y>ctl(0)-1 ) ? scl(x,0,ctl(0)-1,100,255) * src(x-ctl(0),y-ctl(0),z)/255 :

(x>ctl(0)-1 && y<ctl(0) ) ? scl(y,0,ctl(0)-1,100,255) * src(x-ctl(0),y-ctl(0),z)/255 :

min(scl(x,0,ctl(0)-1,100,255),scl(y,0,ctl(0)-1,100,255))*src(x-ctl(0),y-ctl(0),z)/255

where

ctl(0) is the shadow width.

Now you can change the blending for each color:

Category: Neology

Title: Shadowcaster

Copyright: (c) 1997 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r: (x>ctl(0)-1 && y>ctl(0)-1) ? src(x-ctl(0),y-ctl(0),z) :

(x<ctl(0) && y>ctl(0)-1 ) ? scl(x,0,ctl(0)-1,ctl(1),255) * src(x-ctl(0),y-ctl(0),z)/255 :

(x>ctl(0)-1 && y<ctl(0) ) ? scl(y,0,ctl(0)-1,ctl(1),255) * src(x-ctl(0),y-ctl(0),z)/255 :

min(scl(x,0,ctl(0)-1,ctl(1),255),scl(y,0,ctl(0)-1,ctl(1),255))*src(x-ctl(0),y-ctl(0),z)/255

g: (x>ctl(0)-1 && y>ctl(0)-1) ? src(x-ctl(0),y-ctl(0),z) :

(x<ctl(0) && y>ctl(0)-1 ) ? scl(x,0,ctl(0)-1,ctl(2),255) * src(x-ctl(0),y-ctl(0),z)/255 :

(x>ctl(0)-1 && y<ctl(0) ) ? scl(y,0,ctl(0)-1,ctl(2),255) * src(x-ctl(0),y-ctl(0),z)/255 :

min(scl(x,0,ctl(0)-1,ctl(2),255),scl(y,0,ctl(0)-1,ctl(2),255))*src(x-ctl(0),y-ctl(0),z)/255

b: (x>ctl(0)-1 && y>ctl(0)-1) ? src(x-ctl(0),y-ctl(0),z) :

(x<ctl(0) && y>ctl(0)-1 ) ? scl(x,0,ctl(0)-1,ctl(3),255) * src(x-ctl(0),y-ctl(0),z)/255 :

(x>ctl(0)-1 && y<ctl(0) ) ? scl(y,0,ctl(0)-1,ctl(3),255) * src(x-ctl(0),y-ctl(0),z)/255 :

min(scl(x,0,ctl(0)-1,ctl(3),255),scl(y,0,ctl(0)-1,ctl(3),255))*src(x-ctl(0),y-ctl(0),z)/255

where

ctl(0) Shadow width,

ctl(1) Red intensity,

ctl(2) Green intensity,

ctl(3) Blue intensity.

Next: Tutorial 6


Tutorial 6: Mosaic Filter

To get the desired effect we need the modulo operator and the source function:

r,g,b: src(x-x%10,y-y%10,z)

The above code would result in 10x10 pixel blocks. The source of these blocks is always the pixel in their top-left corner. While we are moving further from it away, the modulo helps us still getting the first pixel (in the 10x10 block) as the source.

Now, we want to give the user more freedom. Let's add a slider that determines the block size:

r,g,b: src(x-x%%ctl(0),y-y%%ctl(0),z)

Of course, you could use another independent slider for the block height.

Let's say we want to add a border around each block. We would have to check if a certain value is reached by x and y:

r,g,b: (x%%ctl(0)==0 || y%%ctl(0)==0) ? 0: src(x-x%%ctl(0),y-y%%ctl(0),z)

A nice feature would be adding a border color with slider values (changing the 0 to ctl(z+1)):

r,g,b: (x%%ctl(0)==0 || y%%ctl(0)==0) ? ctl(z+1): src(x-x%%ctl(0),y-y%%ctl(0),z)

where

ctl(0) is the mosaic block size,

ctl(1) is the border color (red),

ctl(2) is the border color (green),

ctl(3) is the border color (blue).

Next: Tutorial 7


Tutorial 7: Weaving the Image

Weaving a picture is not so complex as it sounds. A weave pattern is a neverending pattern on the image, so we can work on its smallest possible part, a 2x2 area.

+--+---+

| A | B |

+--+---+

| C | D |

+--+---+

Tiles A and D are equal, inside them we create a vertical black-white-black blend. Tiles B and C are horizontal black-white-black blends. Let's say each tile is 8 pixels wide and 8 pixels high, giving us a rendering area of 16 x 16. First we should check whether the current coordinates are in area A or D. This is done with expression

(x<8 && y<8) || (x>7 && y>7)

We have to create a vertical black-white-black blend into the areas A and D, so because it is composed by two blends (black to white and white to black), we have to check again if we're already passing half the tile height. In our case the tile height equals 8. The blend is created with the modulo operator. The highest value in our case is 4, so in order to get a good blend from black to white, we

have to multiply it with 64. 64*4 = 256:

y%8 < 4 ? (y%8+1)*64 : (8-y%8)*64

The first modulo operator returns 1, 2, 3 and 4, which we multiply with 64. The second modulo operator is subtracted from 8, then is also multiplied with 64. In

both cases, Filter Factory returns values 64, 128, 192, and 256 (which will be limited to 255). The same is done with the horizontal values. So we first check if we are dealing with areas A and D and apply the vertical blending if necessary, otherwise apply a horizontal blending.

We also included two put-functions, to keep common values in memory.

r: put(x%16,0), put(y%16,1),

(get(0)<8 && get(1)<8) || (get(0)>7 && get(1)>7)?

(y%8)<4?(y%8+1)*64:(8-y%8)*64:

(x%8)<4?(x%8+1)*64:(8-x%8)*64

g,b: (get(0)<8 && get(1)<8) || (get(0)>7 && get(1)>7)?

(y%8)<4?(y%8+1)*64:(8-y%8)*64:

(x%8)<4?(x%8+1)*64:(8-x%8)*64

Let's use a slider to tell Filter Factory which tile size we want. We have to change all numerical values above to the slider value. In the above example, the tile size was 8x8. Every 8 has to be changed to ctl(0), every 7 to (ctl(0)-1), 16 into (ctl(0)*2) and 64 into (256*2/ctl(0)).

So the code will look like this:

r: put(x%(ctl(0)*2),0), put(y%(ctl(0)*2),1),

(get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/2)?(y%%ctl(0)+1)*(256*2/ctl(0)):(ctl(0)-y%%ctl(0))*(256*2/ctl(0)):

(x%%ctl(0))<(ctl(0)/2)?(x%%ctl(0)+1)*(256*2/ctl(0)):(ctl(0)-x%%ctl(0))*(256*2/ctl(0))

g,b: (get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/2)?(y%%ctl(0)+1)*(256*2/ctl(0)):(ctl(0)-y%%ctl(0))*(256*2/ctl(0)):

(x%%ctl(0))<(ctl(0)/2)?(x%%ctl(0)+1)*(256*2/ctl(0)):(ctl(0)-x%%ctl(0))*(256*2/ctl(0))

where

ctl(0) is the tile size.

It's okay, but the blend should not go further as the center of the tile. So with another slider we can control how deep the blend is. You can call it fall-off control. The problem is that we have three different areas in a tile: it starts with a small black-white blend, stays white a while and finally there's a white-black blend. So the second part of the blend's code has to check whether we're in a non-blend area or in the white-black area. The reason we're doing this will be clear when we get to the ultimate version of this filter, where blends are combined with the image underneath creating a weave pattern over the image.

Let's check the vertical blend:

(y%%ctl(0)) < (ctl(0)/ctl(1)) ? (y%%ctl(0)+1)*(256*ctl(1)/ctl(0)) : (y%%ctl(0) > (ctl(0)-1-ctl(0)/ctl(1))) ? (ctl(0)-y%%ctl(0))*(256*ctl(1)/ctl(0)) : 255

Slider 0 is the tile size, slider 1 is the brightness fall-off. The code before the question mark checks if we're within the first boundary. If so, the black-white blend is applied. If not, we check whether we're within the second area. Here the white-black blend is applied. If not, the pixel is colored white (255). Now the whole code looks

r: put(x%(ctl(0)*2),0), put(y%(ctl(0)*2),1),

(get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/ctl(1))?(y%%ctl(0)+1)*(256*ctl(1)/ctl(0)):(y%%ctl(0)>(ctl(0)-1-ctl(0)/ctl(1)))?(ctl(0)-y%%ctl(0))*(256*ctl(1)/ctl(0)):255:

(x%%ctl(0))<(ctl(0)/ctl(1))?(x%%ctl(0)+1)*(256*ctl(1)/ctl(0)):(x%%ctl(0)>(ctl(0)-1-ctl(0)/ctl(1)))?(ctl(0)-x%%ctl(0))*(256*ctl(1)/ctl(0)):255

g,b: (get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/ctl(1))?(y%%ctl(0)+1)*(256*ctl(1)/ctl(0)):(y%%ctl(0)>(ctl(0)-1-ctl(0)/ctl(1)))?(ctl(0)-y%%ctl(0))*(256*ctl(1)/ctl(0)):255:

(x%%ctl(0))<(ctl(0)/ctl(1))?(x%%ctl(0)+1)*(256*ctl(1)/ctl(0)):(x%%ctl(0)>(ctl(0)-1-ctl(0)/ctl(1)))?(ctl(0)-x%%ctl(0))*(256*ctl(1)/ctl(0)):255

where

ctl(0) is the tile size,

ctl(1) is the brightness.

Slider values greater than 20 for slider 1 won't change much, so we changed all ctl(1) into val(1,0,20) limiting it's maximum in 20.

r: put(x%(ctl(0)*2),0), put(y%(ctl(0)*2),1),

(get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/val(1,0,20))?(y%%ctl(0)+1)*(256*val(1,0,20)/ctl(0)):

(y%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-y%%ctl(0))*(256*val(1,0,20)/ctl(0)):255:

(x%%ctl(0))<(ctl(0)/val(1,0,20))?(x%%ctl(0)+1)*(256*val(1,0,20)/ctl(0)):

(x%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-x%%ctl(0))*(256*val(1,0,20)/ctl(0)):255

g,b: (get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/val(1,0,20))?(y%%ctl(0)+1)*(256*val(1,0,20)/ctl(0)):

(y%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-y%%ctl(0))*(256*val(1,0,20)/ctl(0)):255:

(x%%ctl(0))<(ctl(0)/val(1,0,20))?(x%%ctl(0)+1)*(256*val(1,0,20)/ctl(0)):

(x%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-x%%ctl(0))*(256*val(1,0,20)/ctl(0)):255

where

ctl(0) is the tile size,

ctl(1) is the brightness.

The last step is to combine the pattern with the image and the multiply idea: c1*c2 / 256. We simply add the *c/256 to the blends and change 255 to c:

Category: Neology

Title: Digital weaver

Copyright: (c) 1997 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r: put(x%(ctl(0)*2),0), put(y%(ctl(0)*2),1),

(get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/val(1,0,20))?(y%%ctl(0)+1)*(256*val(1,0,20)/ctl(0))*c/256:

(y%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-y%%ctl(0))*(256*val(1,0,20)/ctl(0))*c/256:c:

(x%%ctl(0))<(ctl(0)/val(1,0,20))?(x%%ctl(0)+1)*(256*val(1,0,20)/ctl(0))*c/256:

(x%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-x%%ctl(0))*(256*val(1,0,20)/ctl(0))*c/256:c

g,b: (get(0)<ctl(0) && get(1)<ctl(0)) || (get(0)>(ctl(0)-1)&&get(1)>(ctl(0)-1))?

(y%%ctl(0))<(ctl(0)/val(1,0,20))?(y%%ctl(0)+1)*(256*val(1,0,20)/ctl(0))*c/256:

(y%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-y%%ctl(0))*(256*val(1,0,20)/ctl(0))*c/256:c:

(x%%ctl(0))<(ctl(0)/val(1,0,20))?(x%%ctl(0)+1)*(256*val(1,0,20)/ctl(0))*c/256:

(x%%ctl(0)>(ctl(0)-1-ctl(0)/val(1,0,20)))?(ctl(0)-x%%ctl(0))*(256*val(1,0,20)/ctl(0))*c/256:c

where

ctl(0) is weave size,

ctl(1) is the shadow.

Next: Tutorial 8


Tutorial 8: Waving Around

A simple horizontal/vertical sine wave distortion

The objective is to put a (horizontal and a vertical) sine movement onto the image (without wrapping).

To get information from neighboring pixels we need the src(x,y,z) function. The x and y values have to be changed with sinus values (remember, sinus also returns negative values). The horizontal displacement (x) depends on its vertical position (y). Therefore we have to use src(x+sin(y),y,z) as the base expression. Let's suppose the cycle length is 4 pixels; y values 0,1,2,3 have to return

0,512,0,-512, respectively, so the changed expression will be

src(x + sin (y*1024/4), y, z)

Using this code doesn't give the result we want. Let's work on the amplitude a bit. We have the possibility of getting values between -512 and 512. Dividing the values by 512 would return values between -1 and 1. Dividing the values by 256 would return values between -2 and 2. This means we have to use smaller values in order to get greater amplitude values: sin(?)/(512/?) Our code would then look like this - with sliders as cycle lengths and amplitudes:

x + sin(y*1024/ctl(0)) / ( 512/ctl(2))

Now the complete filter is

Category: Neology

Title: Sine Waves

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r,g,b: src(x + sin(y*1024/ctl(0)) / ( 512/ctl(2)),y + sin(x*1024/ctl(1)) / ( 512/ctl(3)),z)

where

ctl(0) Horizontal cycle width (in pixels),

ctl(1) Vertical cycle width (in pixels),

ctl(2) Horizontal wave amplitude (in pixels),

ctl(3) Vertical wave amplitude (in pixels).

Doing the same with polar coordinates

We simply change src(x,y,z) to rad(d,m,z):

Category: Neology

Title: Polar Waves

Copyright: (c) 1996 by Werner D. Streidt

100526.16@compuserve.com

Author: Werner D. Streidt

r,g,b: rad(d+sin(m*1024/ctl(0))/(512/ctl(2)),m+sin(d*1024/ctl(1))/(512/ctl(3)),z)

where

ctl(0) Angle cycle width (in pixels),

ctl(1) Magnitude cycle width (in pixels),

ctl(2) Angle wave amplitude (in pixels),

ctl(3) Magnitude wave amplitude (in pixels).

Next: Tutorial 9


Tutorial 9: Offsetting the Image - Part I

by Alfredo Mateus

The following filters are taken from Alf's Power Toys.

Channel Offset

Let's start with a very simple filter. All this filter does is displace your picture in the x or y direction, with sliders for each channel and each direction.

This filter is based on the src(x,y,z) function. The src function returns the value for the pixel located in the (x,y) coordinates in the channel z. (0,0) is located in the upper left corner of the picture.

Also, the R,G and B channels have z equal to 0, 1 and 2, respectively. So, if you enter

src(0,0,z)

it will replace every pixel of your picture with the value of the first pixel. So, if you enter src(x,y,z) this will not change the picture at all. For each pixel at position (x,y) it returns the value of itself. This is the same as using c in an expression.

What if we want the value of the neighboring pixel? src(x+1,y,z) will displace the whole picture 1 pixel to the left. What happens when you get to the last pixel in a row, and you don't have a x+1 to get the value from (x is greater than the image's width)? In this case, the source pixel will equal the last available pixel (X-1). So src(x+10,y,z) will result in a streak of horizontal lines in the last 10

pixels.

In order to displace the image with slider values we will use

src(x+ctl(0),y+ctl(1),z)

This will get the value of the slider 0 (ctl(0)) and displace the image to the left and the value of slider 1 (ctl(1)) and displace the picture upward. What if we want to go to the other direction?

src(x+((ctl(0)-128)*X/128),y+((ctl(1)-128)*Y/128),z)

When the slider is in the middle (value 128), there is no displacement. Taking the slider to the left or right will cause displacement to opposite directions. We are multiplying with X/128, so that a maximum slider setting (0 or 255) returns the leftmost / rightmost available pixels on our image. Another, more elegant way to do this is to use val instead of ctl:

src(x+val(0,-X,X)-1,y+val(1,-Y,Y)-1,z)

val takes the value of the slider and scales it between the two parameters, in this case the dimensions of the picture (X and Y).

All right, all we have to do now is place different sliders for each channel:

r: src(x+val(0,-X,X),y+val(1,-Y,Y),z)

g: src(x+val(2,-X,X),y+val(3,-Y,Y),z)

b: src(x+val(4,-X,X),y+val(5,-Y,Y),z)

The control names are:

ctl(0) = Red Horizontal,

ctl(1) = Red Vertical,

ctl(2) = Green Horizontal,

ctl(3) = Green Vertical,

ctl(4) = Blue Horizontal,

ctl(5) = Blue Vertical.

Now, as a homework, make the radial version of this filter using the rad function. You will get the Channel Spin filter.

This filter will not wrap around the image. Let's see if we can get this into Filter

Factory to have a very good Offset filter and maybe more.

The Wrapper

From the filter above we see that after displacing an image too much we get a portion of the image where there is no valid data, so it repeats the last valid pixel. This portion of the image is where we want to have the opposite end of the picture repeated.

Let's see, if we displace the picture with src(x+val(0,0,X),y,z), the portion which gets the pixel repeated is given by X-val(0,0,X). Using the question mark we can select what Filter Factory will do in each area:

x<X-val(0,0,X)?src(x+val(0,0,X),y,z):src(x-(X-val(0,0,X)),y,z)

For x in the left of the repeated pixel area, it displaces the image just like before. For the repeated pixel area, it will place the info from the area that got bumped out to the left. We got wrapping! Let's try this for the vertical direction:

y<Y-val(1,0,Y)?src(x,y+val(1,0,Y),z):src(x,y-(Y-val(1,0,Y)),z)

Now, a little trick to get both in the same filter: the mode control.

ctl(2)<128 ? x<X-val(0,0,X) ? src(x+val(0,0,X),y,z) : src(x-(X-val(0,0,X)),y,z) : y<Y-val(0,0,Y) ? src(x,y+val(0,0,Y),z) : src(x,y-(Y-val(0,0,Y)),z)

ctl(2) is the mode control. If the slider is to the left of 128 it activates the horizontal wrapping. If it's greater than 128, we get vertical wrapping. And what about both at the same time? The final filter will look something like:

Name: The Wrapper

Category : Alf's Power Toys

Copyright: 1996 Alfredo Mateus

Author: Alfredo Mateus

r,g,b: ctl(3)<85? x<X-val(0,0,X)?src(x+val(0,0,X),y,z):src(x-(X-val(0,0,X)),y,z) :

ctl(3)<170? y<Y-val(1,0,Y)?src(x,y+val(1,0,Y),z):src(x,y-(Y-val(1,0,Y)),z) :

mix(y<Y-val(1,0,Y)?src(x,y+val(1,0,Y),z):src(x,y-(Y-val(1,0,Y)),z),

x<X-val(0,0,X)?src(x+val(0,0,X),y,z):src(x-(X-val(0,0,X)),y,z),ctl(5),255)

where

ctl(0) = Horizontal Wrapping,

ctl(1) = Vertical Wrapping,

ctl(3) = Mode,

ctl(5) = Mixing.

I have tried the mixing of wrapping in both directions and if you have a tileable texture to start with, you'll get an interesting effect.

Next: Tutorial 10


Tutorial 10: Offsetting the Image - Part II

Let's move our image around for a while. If we want to move our image 40 pixels to the right and 30 pixels downwards, we have to tell Filter Factory to put in the current pixel position the pixel value 40 pixels from the left and 30 over it:

src(x - 40, y - 30 , z)

In the coordinates between (0,0) and (39,29) FF will take the pixel values from (0,0) and repeat the edge pixels. But we would like to wrap the image around. We have to check the limits first (in the following example for the x-coordinate, only):

(x < 40 ? X-39 +x: x-40)

When FF evaluates pixels 0 to 39, it uses pixels from the right side of the image to wrap around. If FF evaluates pixels in x-coordinates above 39, then it takes the pixel values from the pixel 40 pixels left. Let's do that for the y-coordinates, too:

r,g,b: src(( x<40 ? X-39+x : x-40), (y<30 ? Y-29+y: y-30), z)

With slider 0 we control the horizontal movement, with slider 1 we control the vertical movement:

r,g,b: src(( x<ctl(0) ? X-ctl(0)+x: x-ctl(0)), ( y<ctl(1) ? Y-ctl(1)+y: y-ctl(1)), z)

You would use this filter to wrap around the image and edit the edges for seamless tiling.

Next: Tutorial 11


Tutorial 11: Seamless Tiling

The idea of the seamless tiling is to take part of the image, mirror it horizontally and vertically to create a seamless transition.

An example:

r,g,b: src(x%100,y%100,z)

will fill your image with the 100x100 pixels upper left part of your image. If you want to change the width and height with sliders:

r,g,b: src(x%%ctl(0), y%%ctl(1),z)

where

ctl(0) is tile width,

ctl(1) is tile height.

You don't necessarily have to take the upper left part:

r,g,b: src(x%%ctl(0)+ctl(2), y%%ctl(1)+ctl(3),z)

where

ctl(0) tile width,

ctl(1) tile height,

ctl(2) horizontal offset,

ctl(3) vertical offset.

Now let's see the following code:

r,g,b: src(x%200<100?x%200:200-x%200-1,y%200<100?y%200:200-y%200-1,z)

it will take your 100x100 tile, mirror it sideways and mirror it downwards, thus creating a whole seamless tile pic.

And now with sliders for tile width, height and x/y offset:

Category: Neology

Title: Tiler1

Copyright: 1997 Werner D. Streidt http://www.fhd-stuttgart.de/~ws01

Author: Werner D. Streidt

r,g,b: src(x%(ctl(0)*2)<ctl(0)?x%(ctl(0)*2)+ctl(2):(ctl(0)*2)-x%(ctl(0)*2)-1+ctl(2),

y%(ctl(1)*2)<ctl(1)?y%(ctl(1)*2)+ctl(3):(ctl(1)*2)-y%(ctl(1)*2)-1+ctl(3),z)

where

ctl(0): Tile width,

ctl(1): Tile height,

ctl(2): Horizontal offset,

ctl(3): Vertical offset.

Next: Tutorial 12


Tutorial 12: Preview Window Corrections

by Mario Klingemann

The following sections will help you with code optimization.

When you start programming FF-filters one of the first things you might be wondering about is that the final result looks somewhat different from the small preview. This doesn't happen with color manipulation filters, but whenever there is a distortion you'll encounter it.

Why does this happen and what can be done about it? The reason for this effect is, that FF scales down the original image for the preview and does all the calculations for that preview with the measures of the small image you see in the window. That means that X is not 768 for example, but just 120. The problem occurs when you start moving around pixels. src(x-ctl(0),y,z) with ctl(0) set to 50 will shift the image 50 pixels to the right. In the preview this is more than 40% of the image, but in the original image, if it is 1000 pixels wide, it is just a small hop.

There is of course a solution. You will have to scale the values of the sliders so they give you different results on the small and on the original image. Luckily this is pretty easy. Just replace the ctl(0) with val(0,0,X). That's it. If you fiddle around with y take val(0,0,Y) or val(0,-Y,Y) or val(0,40,5*Y) - as long as there is X,Y or M inside, it will look right.

It gets a bit more complicated if it comes to the sin and cos functions. They will always return a result between -512 and 512 whatever you put in. So convert their input in a way that always get a whole phase or a multiple of it. Therefore one of your favorite command will be the scl function.

You put in a value that comes in a certain range and you'll receive something in a range that you need. Of course you could do that by adding and dividing, but it is much easier.

So back to the sin problem. We know that to get one sin phase we need to feed the function with values from -512 to 512. x will never become negative and especially in the preview never get over 120.

Just for repetition here is the scl function:

scl([input value],[minimum expected input value],[maximum expected input

value],[minimum output value], [maximum output value])

What we know is that x goes from 0 to X. We should scale it then: sin(scl(x,0,X,-512,512)).

If you want two phases, just multiply:

sin(2*scl(x,0,X,-512,512))

If you want to vary it use ctl():

sin(ctl(0)*scl(x,0,X,-511,512))

If you don't want the whole phase for some soft gradient for example you'll have to reduce the output of the scl function:

sin(scl(x,0,X,-254,255)) or sin(scl(x,0,X,-64,64))

Another thing is that sin produces values from -512 to 512 but pixels accept only values from 0 to 255. What we need is just another scale:

scl(sin(ctl(0)*scl(x,0,X,-512,512)),-512,512,0,255)

Of course (sin(ctl(0)*scl(x,0,X,-511,512))+511)/4 would be the same, but scl is much easier to understand and easy to play around with it for experiments with variations of your final filter.


How to Register

How much to pay?

There are several Ultimate Paint licenses:

•	Ultimate Paint Standard, single license, registration code sent via e-mail, $39.95,

•	Ultimate Paint Standard update from the registered version of UFX, single license, registration code sent via e-mail, $32.95,

•	Ultimate Paint Deluxe + Plugin Galaxy, single license, sent on CD-ROM, includes more than 60 high quality landscape images and the registered version of the Adobe compatible Plugin Galaxy, $69.95,

•	Ultimate Paint Deluxe + Amphisoft Plugins, single license, sent on CD-ROM, includes more than 60 high quality landscape images and the registered version of the Adobe compatible Amphisoft Plugins, $49.95,

•	Ultimate Paint Deluxe + Amphisoft Plugins, 5-user license, sent on CD-ROM, includes high quality landscape images and the registered version of the Amphisoft Plugins, $159.95,

•	Ultimate Paint Deluxe + Amphisoft Plugins, unlimited site license, sent on CD-ROM, includes high quality landscape images and the registered version of Amphisoft Plugins, $399.95,

•	Ultimate Paint Deluxe + Amphisoft Plugins, unlimited site license for educational and governmental institutions, includes high quality landscape images and the registered version of Amphisoft Plugins, sent on CD-ROM, $119.95.

What's the difference between these licenses?

When you order Ultimate Paint Standard you will receive a registration code only, while in the case of the Deluxe edition you receive the product on CD-ROM along with the registered version of either Plugin Galaxy or Amphisoft Plugins. The demos of the filter collections are included with this unregistered version of UP, so you can simply check them by invoking any filter from Images/Adobe/Amphisoft or _Plugin Galaxy.

Only the Deluxe version has multiple-user and site licenses.

In case of purchasing Ultimate Paint Standard, you will receive the final registration code by email directly from us within two days. This code is a very short file which should be put in the folder of Ultimate Paint.

If you order Ultimate Paint Deluxe, you will receive a registration code by email within two days and a CD-ROM in approx. 10 working days (shipped from Europe).

How to register UP?

When you receive your registration code via e-mail you should extract it and place it in the folder of Ultimate Paint. After that UP will be registered, and runs without any time limits or restrictions. The Deluxe CD-ROM also contains the install of the registered version.

In addition all minor UP versions before the next major version number change stay registered which means that you can use all updates for free until the next major version.

Keep your registration file in a safe place: in case you delete UP by accident you will need it again.

Please do not distribute your registration code. It contains your name, so it's easy to identify who gave away the code.

How to pay?

For your convenience we have contracted another company, ShareIt! to provide an easy registration service. Orders can be placed by using a credit card (Discover, MasterCard, Visa, or American Express) or check, you can order UP licenses directly online or via phone, fax and postal mail.

INTERNET ORDERS

Visit our ShareIt! order page and fill out the order form.

Fast, easy and secure!

PHONED ORDERS

U.S. residents should call

800 903 4152

or

724 850 8186

Europeans and the rest of the world should call

(+49) 221 310 88 20

Please call these numbers only to place orders, ShareIt! cannot provide any technical assistance for you, since they are only distributors of our product.

FAXED ORDERS (24 hours)

To order UP offline, please print out form registerEn.txt (located in your Ultimate Paint folder), and fax it to:

724-850-8187 (U.S. residents)

+49 221 310 88 29 (Europeans and the rest of the world)

MAILED ORDERS

U.S. Residents may register with a check or money order by making them payable to ShareIt! Inc., enclosing it to the filled-in registerEn.txt form and sending it to:

ShareIt! Inc.

P.O. Box 844

Greensburg, PA 15227-0241

USA

European Residents and the rest of the world should post their order by printing out form registerEn.txt and sending it to ShareIt!:

element 5 AG / ShareIt!

Vogelsanger Strasse 78

50823 Koeln

Germany

Please be sure to leave one full line between the Street Address and the city and postal (zip) code. This is a norm of the German postal system and is crucial in assuring the smooth automatic sorting of the mail. Failure to leave a blank between these two lines may cause delays in delivery times.


How to create a skin

You can create your own skins for this editor. The best tool for creating a skin is the editor itself. You should draw two separate icon groups of possibly different sizes. The first group is for the icons of the tool bar, while the second group is for the function bar-icons and any other icons that can be changed and have similar dimensions.

Create a fairly big image. We fill it with black, but you can use any other color.

To the top left corner you should give the dimensions of each group:

Be careful to place the numbers to the exact place as shown on the image: the first number should start at pixel (0,0), the second one at (12,0) and the rest is at (24,0), (36,0), (48,0) and (60,0), respectively.

The first number is the number of rows for the first icon group. The second and third number is the width and height of each icon of this group.

The fourth number is, again, the number of rows for the second icon group. While the last two numbers are the dimensions of the icons of the second group.

You can use any color to paint the numbers except the background color. The numbers should look like this:

Then leave one pixel row empty and start drawing the icons of the first group. Each icon should have the size given previously and should have a 1-pixel-wide separator line between itself and the next one. You don't have to leave an extra pixel line after the rightmost icon. Each icon's background color will be changed to transparent when the icon is displayed in the program. For each icon the background color will be the color of the icon's bottom left pixel.

Fill the whole row with the icons and start a new line of icons only when there's no space left for another one. The width of this skin image can be any width you choose, the program count the number of icons per row, automatically. The number of icon rows has to match the number you've entered into the top left corner, e.g. if you placed number '6' there, you should have 6 rows of icons.

Leave a 1-pixel separator row after the icons of the first group, then start drawing the icons of the second icon group. Use the dimensions you've given above and fill all rows you've specified.

You can even anti-alias your icons into the background. Because you won't know in advance what the background color of the user's desktop is, rather than using exact colors you have the chance to declare 75%, 50% and 25% transparency for a bunch of colors.

Place one pixel with a color you use on your icons to position (68,0). Now specify a color you will use on the icons but would like to appear as 75% the original color defined above and 25% the yet-unknown background color. Paint a pixel with this new color to position (68, 1). Now select a new color that you would like to appear as 50% original, 50% background and put it to position (68, 2). Finally select a color that will represent 25% original and 75% background color. Fill pixel (68, 3) with this one. The original (68, 0) color will appear on the icons as it is, however the three colors below it will represent 25%, 50% and 75% transparency of the same color.

You can define as many such color groups as you like, simply start a new group at (69,0), etc.

Save the image into the Skin folder of UP. The usage of the PNG format is recommended as it is lossless (don't use JPEG!) and gives the tightest compression. Before saving the image count the colors with Image/Info and use the appropriate subformat for the image. Specify 256 color mode if you have colors less than 256, 16 if you used less than 16 colors. This way you can save a few hundred bytes.

The last step is to rename the file from extension .png to .skn. Restart the program and you will instantly be able to select the new skin.

Finally let's see the icon order:

First icon group

1.	Circular Brush Shape

2.	Circular Brush 1x1

3.	Circular Brush 3x3

4.	Circular Brush 11x11

5.	Circular Brush 21x21

6.	Rectangular Brush Shape

7.	Rectangular Brush 1x1

8.	Rectangular Brush 3x3

9.	Rectangular Brush 11x11

10.	Rectangular Brush 21x21

11.	Change Color

12.	Clear Image

13.	Clone

14.	Circle

15.	Filled Circle

16.	Ellipse

17.	Filled Ellipse

18.	Cut Rectangle

19.	Cut Predefined Rectangle

20.	Cut Freehand

21.	Cut Polygon

22.	Cut With Magic Wand

23.	Solid Fill

24.	Pattern Fill

25.	Filled Shape

26.	Filled Polygon

27.	Get Color

28.	Grid

29.	Single Line

30.	Continuous Line

31.	Move Selection

32.	Continuous Freehand

33.	Dotted Freehand

34.	Single Freehand

35.	Filled Rectangle

36.	Rectangle

37.	Filled Square

38.	Square

39.	Single Curve

40.	Continuous Curve

41.	Spray

42.	Airbrush

43.	Write Text

44.	Median Filter

45.	Sharpen Filter

46.	Blur Filter

47.	Negative Filter

48.	HSV Change Filter

49.	Grayscale Filter

50.	Brightness/Contrast Filter

51.	Remove Noise Filter

52.	Mosaic Filter

Second icon group

1.	Acquire

2.	Cascade

3.	Close All

4.	Help Contents

5.	Copy

6.	Cut

7.	Delete

8.	Visit UP Homepage

9.	Visit UFX Homepage

10.	Help on Topic

11.	New

12.	Open

13.	Open Next Image

14.	Open Prev Image

15.	Paste

16.	Paste as New

17.	Preferences

18.	Print

19.	<unused>

20.	Save

21.	<unused>

22.	Write Text

23.	Undo

24.	Redo

25.	Info

26.	Zoom Icon

27.	Retrieve (Save Optim Panel)

28.	Add (Save Optim Panel)

29.	Remove (Save Optim Panel)